Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多个指令需要共享同一个私有范围_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

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时,这表明我在做一件事情,而这并不是我的本意