所以我根据我的项目进行了一些实验
我创建了2个指令,一个使用隔离范围而另一个不是..
问题是:
有没有办法在不使用隔离范围的情况下获取范围属性? 因为在我的项目中,我没有一个孤立的自定义范围 指令环境,我还需要访问父范围
我可以使用angular.element操作dom('#' + scope.id)? 如果没有办法做到这一点?
这是unisolated自定义指令
<test-directive item="item" content="item.context"></test-directive>
这是js代码
app.directive('testDirective', function() {
return {
restrict: "EA",
scope: false,
template:"<div>test directive</div>",
link: function(scope, elm, attr) {
console.log(attr.item); //I want it like the result gives in line 39
console.log(attr.id); //I want it like the result gives in line 41
console.log(attr.content); //I want it like the result gives in line 43
console.log(scope.name);
}
}
});
这是孤立的
<isolated-directive id=item.id item="item" content="item.context"></isolated-directive>
这是js代码
app.directive('isolatedDirective', function() {
return {
restrict: "EA",
scope:{
item:'=item',
id:'=id',
content:'=content',
},
template:"<div>isolated directive</div>",
link:function(scope,elm,attr) {
console.log(scope.item.id);
console.log(scope.id);
console.log(scope.content);
console.log(scope.name); //I want it like the result gives in line 27
}
}
});
这是有效的plunkr
有谁愿意帮忙?答案 0 :(得分:0)
您可以使用scope: true
,范围将从其插入的位置原型继承。但是,如果您只需要访问父作用域,则始终可以使用$parent
,即使在隔离范围内也是如此。不推荐,但有可能。
答案 1 :(得分:0)
Q1:
app.directive('testDirective', function() {
return {
restrict: "EA",
scope: false,
template:"<div>test directive</div>",
link: function(scope, elm, attr) {
console.log(scope[attr.item]); //I want it like the result gives in line 39
console.log(scope[attr.id]); //I want it like the result gives in line 41
console.log(scope[attr.content]); //I want it like the result gives in line 43
console.log(scope.name);
}
}
});
Q2:
链接函数中的parm elm
基本上是与指令相关的DOM。如果您真的想要DOM属性中的scope.item.id
,请使用ng-attr
来定义您的属性,如下所示。请注意,angular.element
仅用于将DOM包装到JQuery元素,但不用于DOM查找。
<isolated-directive ng-attr-id="{{item.id}}" item="item" content="item.context"></isolated-directive>