Angularjs 数据模型更改时,ngSwitch不更新
我对Angular还不熟悉,正在尝试编写一些简单的应用程序。 我在使用ngSwitch按需切换相应指令时遇到问题,如下所示 html标记: 主html文件: 方向一:Angularjs 数据模型更改时,ngSwitch不更新,angularjs,angularjs-directive,angularjs-ng-switch,Angularjs,Angularjs Directive,Angularjs Ng Switch,我对Angular还不熟悉,正在尝试编写一些简单的应用程序。 我在使用ngSwitch按需切换相应指令时遇到问题,如下所示 html标记: 主html文件: 方向一: .directive('directiveOne',function(){ return { restrict:"AE", replace:true, template:"<div>this is directive one</div>", con
.directive('directiveOne',function(){
return {
restrict:"AE",
replace:true,
template:"<div>this is directive one</div>",
controller:"Dir1Controller",
}
})
.directive('directiveTwo',function(){
return {
restrict:"AE",
template:"<div>this is directive 2</div>,
controller:"Dir2Controller"
}
})
最后是指令的3个控制器
.controller('MainController',function($scope,ShareDataFct){
$scope.$watch('varChanged',function(){
$scope.myvar=ShareDataFct.var;
})
})
.controller('Dir1Controller',function($scope){
//nothing to do here yet
})
.controller('Dir2Controller',function($scope){
//nothing to do here yet
})
然后我尝试更改ShareDataFct变量,但是视图(ng开关)没有根据myvar的更改来显示指令。
请告知。谢谢。实际上你有几个问题 第一:您正在使用$rootscope.$broadcast,并尝试使用$watch捕捉结果 您应该使用$scope.$on而不是watch 第二:永远不要尝试使用$rootscope、$broadcast和$watch更新vars。如果你试图这么做,那你就是做错了 怎么做?直接从您的工厂共享var即可
app.factory('ShareDataFct',function(){
var srv={};
srv.data={};
srv.data.value="";//init your value here
return srv;
})
在控制器中,您可以如下方式绑定它:
.controller('MainController',function($scope,ShareDataFct){
$scope.data=ShareDataFct.data;
})
<div>{{data.value}}</div>
在您看来,可以这样使用它:
.controller('MainController',function($scope,ShareDataFct){
$scope.data=ShareDataFct.data;
})
<div>{{data.value}}</div>
{{data.value}
在您的ng交换机中:
<div ng-switch on="data.value">
<div ng-switch-when="Test"> This is a test</div>
<div ng-switch-when="TestAgain"> This is a test ... again !</div>
</div>
这是一个测试
这是一个测试。。。再一次
请注意,共享对象而不是原语值很重要,因为更新该值会删除引用,并且不会在应用程序的其他部分更新
下面是一个工作示例
希望有帮助
编辑:添加了plunker您可以添加ng开关吗?感谢您的快速响应。但是如果我想从另一个控制器更改ShareDataFct,并且它将在主控制器上自动更新,那该怎么办呢?是的:)!如果使用相同类型的绑定$scope.data=ShareDataFct.data;在您的其他控制器中,当您更新工厂中的值时,它将更新链接到它的所有值,无论您绑定到何处(控制器、服务、工厂、指令等)。谢谢verymuch Okazari。事实上,我花了一段时间才解决这个问题。我在服务中使用一个函数(setter)来更改服务中var的值,这样它就不会更新——不知道为什么。无论如何,控制器中服务变量的赋值对我来说是有效的。非常感谢您的帮助。@user804293实际上这也应该适用于setter。只是口味的问题。关键是引用包含基元值的对象,而不是基元值本身,以避免引用丢失。