Javascript 多个指令需要共享同一个私有范围
我有两个指令,一个限于元素,另一个限于属性Javascript 多个指令需要共享同一个私有范围,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我有两个指令,一个限于元素,另一个限于属性 <bar-foo special></bar-foo> <bar-foo special doit="doit"></bar-foo> doit值由特殊指令设置 angular.module('App') .directive('special', function() { return { restrict: 'A', link: function (scop
<bar-foo special></bar-foo>
<bar-foo special doit="doit"></bar-foo>
doit
值由特殊指令设置
angular.module('App')
.directive('special', function() {
return {
restrict: 'A',
link: function (scope) {
scope.doit = false;
}
}
});
问题是,barFoo有一个私有作用域,而doit
并没有添加到该作用域(而是$parent)。我想知道是否可以让特殊指令与barFoo指令具有相同的范围
我只能想到以下解决方案:1)添加一个额外的属性
<bar-foo special></bar-foo>
<bar-foo special doit="doit"></bar-foo>
或2)将barfoo的模板html更改为
<div><h1 ng-if="$parent.doit">Bar Foo</h1></div>
Bar-Foo
虽然这很有效,但感觉有点像是一种变通 您建议的解决方案不是一种变通方法,事实上是一种可以接受的方法,可以满足您的需要 AngularJS指令提供隔离作用域的功能是有充分理由的。考虑到您希望多次使用一个指令作为复制元素,您希望确保该作用域与所有其他作用域保持隔离 除了您建议的两种解决方案外,还有第三种解决方案: 创建一个angularjs
服务
,它保存您的doit
变量。创建用于get()
和update()
此变量的服务方法。
然后,您可以将此服务
注入两个指令中,并通过调用服务方法共享指令中的doit
变量。这样,无论您在指令中使用何种范围,都可以确保共享相同的doit
变量
请注意,angularjs
service
是单例,因此每次调用服务上的get()或update(),您都在处理doit
变量的同一个实例。您建议的解决方案不是一种解决方法,事实上是一种可以接受的方法,可以满足您的需要
AngularJS指令提供隔离作用域的功能是有充分理由的。考虑到您希望多次使用一个指令作为复制元素,您希望确保该作用域与所有其他作用域保持隔离
除了您建议的两种解决方案外,还有第三种解决方案:
创建一个angularjs服务
,它保存您的doit
变量。创建用于get()
和update()
此变量的服务方法。
然后,您可以将此服务
注入两个指令中,并通过调用服务方法共享指令中的doit
变量。这样,无论您在指令中使用何种范围,都可以确保共享相同的doit
变量
请注意,angularjs
service
是单例,因此每次调用服务上的get()或update(),您都在处理doit
变量的同一个实例。您建议的解决方案不是一种解决方法,事实上是一种可以接受的方法,可以满足您的需要
AngularJS指令提供隔离作用域的功能是有充分理由的。考虑到您希望多次使用一个指令作为复制元素,您希望确保该作用域与所有其他作用域保持隔离
除了您建议的两种解决方案外,还有第三种解决方案:
创建一个angularjs服务
,它保存您的doit
变量。创建用于get()
和update()
此变量的服务方法。
然后,您可以将此服务
注入两个指令中,并通过调用服务方法共享指令中的doit
变量。这样,无论您在指令中使用何种范围,都可以确保共享相同的doit
变量
请注意,angularjs
service
是单例,因此每次调用服务上的get()或update(),您都在处理doit
变量的同一个实例。您建议的解决方案不是一种解决方法,事实上是一种可以接受的方法,可以满足您的需要
AngularJS指令提供隔离作用域的功能是有充分理由的。考虑到您希望多次使用一个指令作为复制元素,您希望确保该作用域与所有其他作用域保持隔离
除了您建议的两种解决方案外,还有第三种解决方案:
创建一个angularjs服务
,它保存您的doit
变量。创建用于get()
和update()
此变量的服务方法。
然后,您可以将此服务
注入两个指令中,并通过调用服务方法共享指令中的doit
变量。这样,无论您在指令中使用何种范围,都可以确保共享相同的doit
变量
请注意,angularjs
service
是单例的,因此每次调用服务上的get()或update(),您都在处理doit
变量的同一个实例。每当我遇到$parent时,都表明我在以一种非本意的方式做某事。你似乎也有同样的感觉。我会亲自去寻求第一个解决方案,每当我遇到$parent时,这表明我在做一些不该做的事情。你似乎也有同样的感觉。我会亲自去寻求第一个解决方案,每当我遇到$parent时,这表明我在做一些不该做的事情。你似乎也有同样的感觉。我会亲自去寻求第一个解决方案,每当我遇到$parent时,这表明我在做一件事情,而这并不是我的本意