Javascript 两个控制器,一个角度范围变量
好的,我有两个控制器,控制站点的两个明显不同的部分,它们在同一个页面上 第一种是通讯注册表,第二种是购物篮。第二个不是作为Javascript 两个控制器,一个角度范围变量,javascript,angularjs,Javascript,Angularjs,好的,我有两个控制器,控制站点的两个明显不同的部分,它们在同一个页面上 第一种是通讯注册表,第二种是购物篮。第二个不是作为ng controller指令直接放置在DOM中,而是作为自定义指令的控制器 一些代码: <div ng-controller="newsletter-signup"> <div ng-show="showLoader"> ... Cool loading animation here ... </div>
ng controller
指令直接放置在DOM中,而是作为自定义指令的控制器
一些代码:
<div ng-controller="newsletter-signup">
<div ng-show="showLoader">
... Cool loading animation here ...
</div>
... Form in here ...
</div>
<div basket>
<div ng-show="showLoader">
... Cool loading animation here ...
</div>
... Basket data in here ...
</div>
然而,当任一控制器中的$scope.showLoader
为true
时,新闻稿和购物篮上都会显示此get
我似乎不知道如何将作用域彼此隔离,但继续使用相同的变量名
basket指令如下所示:
return {
link : linkFn,
scope: '=',
restrict : 'A',
controller : 'BasketController'
};
BasketController
从未在模板中定义
我怎样才能解决这个问题
我不希望通讯的div
在更新通讯篮时显示,同样,我也不希望通讯篮的div
在更新通讯篮时显示
编辑:我们使用以下内容来定义组件,我想知道这是否是根本原因
window.angular.module('Basket', []);
window.angular.module('App', ['Basket']);
正如@jme11所发布的,您需要将作用域键传递给一个对象,以便获得一个隔离的作用域 在这两个地方,变量是不同的,因此定义变量的第一个地方可以是true或false。但是,第二位是隔离作用域,除非我们直接将变量传递给它,否则它将保持未定义状态,这是JS中的一个falsy值,因此ng show将不会传递 这里有一支笔可以更好地说明这个问题
return {
link : linkFn,
scope: {
showLoader: '='
},
restrict : 'A',
controller : 'BasketController'
};
在指令中,可以使用
作用域:{}
创建一个独立的作用域。但是basket指令有模板吗?根据你发布的内容,我只是不明白它是做什么的。篮子是附加到某些动态内容的包装div
的属性。它没有自己的模板。我将更新更清楚。两个div是否都有一个共同的父级,其作用域也可能包含一个“showLoader”变量?@SebastianSdiv
的父级永远不会包含showLoader
,它也没有自己的作用域。我正试图将两者彼此隔离。@默认情况下,AlexMcCabe非嵌套控制器是隔离的,因此问题是:祖先元素上会发生什么情况。感谢您的帮助,但我仍然有一些问题。到目前为止,在我用Angular所做的一切尝试中,孤立的示波器给我带来了最大的麻烦。我用叉子叉了你的笔,改变了一些东西,使之更接近我使用它的目的,但是我无法理解:请查看编辑,看看这是否是问题的一部分?超级接近,但隔离范围也适用于函数和变量!哎呀,我不小心把笔写得太多了。。。但是无论如何,忘记孤立的范围,因为它不需要,只会造成更多的混乱。不幸的是,这是我以前的经历。无论如何,我相信我已经找到了问题的根源。我们定义单个模块,然后将它们称为应用程序
模块的依赖项,这意味着一切都在全局范围内。我们无法在此阶段重新编写应用程序,因此我必须找到其他路径。谢谢你的帮助。没问题,如果有帮助的话,我可以展示我意外删除的隔离作用域示例!
return {
link : linkFn,
scope: {
showLoader: '='
},
restrict : 'A',
controller : 'BasketController'
};