在角度指令链接函数中使用“attrs”参数有什么用处

时间:2014-06-13 15:05:49

标签: javascript angularjs angularjs-directive angularjs-scope angular-directive

考虑这个指令:

.directive('myDirective', function(httpRequestTracker) {
    return {
        restrict: 'EA',
        scope: {
            myvar: "=",
        },
        link: function($scope, elem, attrs) {
            console.log($scope.myvar, attrs.myvar);
        }
    };
})

和这个JS控制台输出:

  

> undefined undefined //如果没有属性

     

>值value //如果attribute value =“value”

attr函数的link参数有什么用? $ scope有什么区别?

由于

2 个答案:

答案 0 :(得分:2)

attrs只是指令的原始属性列表
scope更复杂,您可以使用三个不同的运算符来填充值:

  • =在HTML中评估表达式,可能包含对象
  • @解释作为字符串传递的值。总是。
  • &可让您访问在父作用域
  • 上定义的函数

答案 1 :(得分:1)

我知道我参加派对已经很晚了,但是为了后人,对我来说最重要的区别是在指令的定义对象(而不是链接函数签名)中使用scope: {...}会在其中创建一个隔离范围指令元素,而完全省略scope属性并从attrs手动检索值则不会。在很多情况下,无论出于何种原因,您不想制作新的范围,但仍需要某些属性的值。