AngularJS没有内置的DOM选择引擎,但提供了处理jQuery为典型应用程序提供的一部分功能的实用方法。没有jQuery的AngularJS DOM /文档选择
但是,DOM选择仍然是国王,我试图将jQuery保留在我的应用程序中,仅用于DOM选择的唯一目的。
Angular以可注射的形式提供$ document服务。我觉得这很麻烦。例如,使用$文件,您将需要$文件注入到所需的所有指令,并呼吁querySelectorAll,然后将其与角范围达到原生DOM选择:
angular.element($document[0].querySelectorAll('#element'))
这是愚蠢的。
在有临时我提供我自己一个全球性的帮手,但它不使用角的包裹$文件...
// Create a shortcut to querySelectorAll
window.query = function(selector) {
return document.querySelectorAll(selector)
}
// For use inside a directive like so...
angular.element(query('#element'))
AngularJS是过敏全局和包装保护和可测试性全局。有没有一种干净的方式,我可以利用querySelectAll而不传递$文档到每个指令?我可以用jQuery的相同方式扩展angular.element,但利用querySelectorAll吗?
编辑:
我也想说明原来的JQLite库支持基本的选择https://code.google.com/p/jqlite/wiki/UsingJQLite#Supported_Selectors。
的AngularJS但是执行不支持选择,也似乎提这个功能遗漏 - http://docs.angularjs.org/api/angular.element
相反AngularJS做:
throw Error('selectors not implemented');
^当传递给angular.element该项目是一个字符串,它不不以'<'开头。
它会是不错的,如果那是:
return document.querySelectorAll(element)
...一些基本的错误预防逻辑。
你有没有想过使用像[Sizzle](http://sizzlejs.com/)而不是完整的jQuery? (jQuery在内部运行) – 2013-03-22 18:00:12
我有,并且它可能是直到Angular采用选择模式之前的方式。你会看到我已经更新了帖子,表明我希望它只是在异常点返回一个document.querySelectorAll尝试。我的意思是,为什么不呢?这里没有增加膨胀。 – BradGreens 2013-03-22 18:17:25
我还应该注意到,在这些情况下,当Angular团队推荐使用document.querySelectorAll时,他们从他们在这里提倡的包装全局模式中脱身 - http://docs.angularjs.org/api/ng.$window 。 – BradGreens 2013-03-22 18:19:55