Angular JS通过链接函数

时间:2017-06-03 13:14:16

标签: angularjs dom angularjs-directive

我们知道我们可以通过元素从指令访问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()

感谢

2 个答案:

答案 0 :(得分:1)

postLink函数公开的element jqLit​​e 类对象,它是一个微小的,API兼容的jQuery子集,允许AngularJS在跨浏览器兼容的情况下操作DOM办法。 jqLit​​e 仅实现最常用的功能,目标是占用空间非常小。

find()方法仅限于按标记名称查找。如果您希望find()方法使用类选择器,请在angular.js文件之前加载jQuery。

  

如果jQuery可用,angular.element是jQuery函数的别名。如果jQuery不可用,angular.element委托给AngularJS的jQuery内置子集,称为“jQuery lite”或jqLit​​e。

     

要使用jQuery,只需确保它在angular.js文件之前加载。您还可以使用ngJq指令指定jQueryite应该用于jQuery,或者如果页面上存在多个版本,则使用特定版本的jQuery。

     

— AngularJS angular.element API Reference

  

我们不能使用元素。 closest函数代替find来获取div?

jQuery closest功能不属于AngularJS jqLite。要使用closest函数,并将element值暴露给指令postLink函数,请在加载AngularJS库之前加载jQuery库。

有关jqLit​​e函数的列表,请参阅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那样功能齐全。