自定义指令范围与attrs

时间:2015-06-22 19:47:10

标签: javascript angularjs angularjs-directive

在angular中创建自定义指令时我有一个问题。 当我使用链接功能时,我不确定使用attrs或scope访问属性时的真正区别。 以这段代码为例:  

myApp.directive('someDirective', function() {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            title: '=title'
        },
        template: '<img/>',
        link: function(scope, element, attrs) {
            if (scope.title) {
                // do something here
            }
            if (attrs.title){
                // do something here
            }
        },
    }

根据我的观察访问&#39;标题&#39;来自attrs和范围的属性具有类似的效果。有什么真正的区别?

1 个答案:

答案 0 :(得分:19)

不同之处在于属性根据定义属于String类型。总是。在您的情况下,attrs.title字面上的字符串将等同于您在HTML中传递给属性的内容。

但是,scope.title会解析并评估属性attr.title的结果。

实施例。如果你在HTML中使用这样的东西

<some-directive title="name"></some-directive>

在范围内定义了$scope.name = "Thomas Mann"attr.title将为字符串"name",而scope.title将为"Thomas Mann"