angularjs:从ng-switch中的控制器更改父范围

Gac*_*cha 5 javascript angularjs

所以,我可以从子控制器更改模型值,但是当子控制器在ng-switch中时,它不起作用,为什么?我创建了一个示例来演示它.

避免这种情况的一种方法是使用.模型名称,例如bunnies.kills.这是一个错误还是这个功能?

使用Angular 1.0.6

Dan*_*Dan 6

使用您的代码结构,在您的子控制器中,您需要更改:

$scope.$parent.kills++;
Run Code Online (Sandbox Code Playgroud)

$scope.$parent.$parent.kills++;
Run Code Online (Sandbox Code Playgroud)

说明:MainCtrl的范围是父的范围SimpleParentCtrl,但是祖父母Step1CtrlStep2Ctrl.正如其他人指出的那样,ng-switch创建自己的范围,然后你Step1CtrlStep2Ctrl每个人创建了一个子范围ng-switch.

注意:每次单击1或2按钮时ng-switch,它和当前匹配的子控制器都会获得一个新范围.

另外:如果您正在查看Angular源并且想知道该ng-switch指令如何在没有scope属性的情况下创建自己的范围,答案是它在链接方法中手动执行scope.$new().该指令ng-include,ng-switch,ng-repeat,和ng-view所有的创造新的范围这样一来,无论是在链接方法或编译方法的返回链接功能.

资源:

https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance http://www.youtube.com/watch?v=ZhfUv0spHCY&feature=youtu.be&t=30m