我们知道我们可以通过元素从指令访问dom,因为元素是在链接函数中注入的。
var app = angular.module("myApp", []);
app.directive('busyBox',function(){
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.on('click', function(){
if(attrs.id=='btnadd')
{
var divElement = angular.element(document.body.querySelector('.parent')).append('<div class="child">Some text</div>');
// console.log(divElement);
// element.parent().find('.parent').append('<div>Some text</div>')
//element.closest('.parent').append('<div class="child">child</div>')
//angular.element(document).find('.parent').append('<div class="child">child</div>');
}
else if(attrs.id=='btnDel')
{
angular.element(document.body.querySelector('.child')).remove();
// m.removeChild(m.firstChild);
}
});
}
}
})
以上代码正常运行,但如果我不使用angular.element()
,如果我使用element(document.body.querySelector('.parent'))
则代码无效。
元素注入链接函数link: function(scope, element, attrs)
当元素在指令中时,我为什么要使用angular.element()
?
请告诉我如何使用指令中的元素来访问dom而不是angular.element()
。
感谢
答案 0 :(得分:1)
postLink函数公开的element
是 jqLite 类对象,它是一个微小的,API兼容的jQuery子集,允许AngularJS在跨浏览器兼容的情况下操作DOM办法。 jqLite 仅实现最常用的功能,目标是占用空间非常小。
find()
方法仅限于按标记名称查找。如果您希望find()
方法使用类选择器,请在angular.js
文件之前加载jQuery。
如果jQuery可用,
angular.element
是jQuery函数的别名。如果jQuery不可用,angular.element
委托给AngularJS的jQuery内置子集,称为“jQuery lite”或jqLite。要使用jQuery,只需确保它在
angular.js
文件之前加载。您还可以使用ngJq
指令指定jQueryite应该用于jQuery,或者如果页面上存在多个版本,则使用特定版本的jQuery。
我们不能使用元素。
closest
函数代替find
来获取div?
jQuery closest功能不属于AngularJS jqLite。要使用closest
函数,并将element
值暴露给指令postLink函数,请在加载AngularJS库之前加载jQuery库。
有关jqLite函数的列表,请参阅AngularJS angular.element API Reference
答案 1 :(得分:0)
请告诉我如何使用指令中的元素来访问dom而不是angular.element()
如果要使用传递给指令的link函数的element
对象来操作DOM,则必须使用元素对象公开的various methods,如{{1} }。
不要像这样使用它:
find
相反,你可以这样做:
element(document.body.querySelector('.parent'))
请注意,正如@georgeawg的回答中提到的那样,您可能正在使用JQLite或JQuery ......其中JQLite功能并不像JQuery那样功能齐全。