在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和范围的属性具有类似的效果。有什么真正的区别?
答案 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"
。