自定义指令的作用域 vs attrs

12 浏览
0 Comments

自定义指令的作用域 vs attrs

在创建一个自定义指令时,我有一个顾虑。当我使用link函数时,我不确定通过attrs或scope访问属性的真正区别是什么。\n以这段代码为例:\n

myApp.directive('someDirective', function() {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            title: '=title'
        },
        template: '',
        link: function(scope, element, attrs) {
            if (scope.title) {
                // 在这里做一些操作
            }
            if (attrs.title){
                // 在这里做一些操作
            }
        },
    }

\n根据我的观察,通过attrs和scope访问\'title\'属性具有类似的效果。真正的区别是什么呢?

0
0 Comments

自定义指令的作用域和属性之间的区别在于属性在定义上是字符串类型。始终如此。在你的情况下,`attrs.title`将完全等于你在HTML中传递给属性的字符串。

然而,`scope.title`是属性`attr.title`的解析和计算结果。

例如,如果你在HTML中使用以下代码:


其中 `$scope.name = "Thomas Mann"` 在作用域中定义,那么 `attr.title` 将是字符串 `"name"`,而 `scope.title` 将是 `"Thomas Mann"`。

要补充一下,你还可以使用 `scope.$eval(attrs.title)` 在作用域的上下文中获取属性的解析版本。

就这样吗?我认为当你使用 `@` 来绑定作用域时,它也被传递为字符串,所以它具有相同的效果,对吗?

基本上,通过属性传递的内容是字符串,而通过作用域变量传递的内容可以是任何数据类型。但是你也可以使用 `scope.$eval(attrs.title)` 在作用域的上下文中评估属性,正如我上面所评论的。

0