带有父子控制器的Angular中的ng-switch

我有以下的HTML

<html ng-app="app" ng-csp=""> <body ng-controller="MainController" capture ng-class="view"> <div id="wrap" ng-switch="view"> <div id="login" ng-switch-when="login" ng-controller="SignInController"> my login code </div> <div id="project" ng-switch-when="project" ng-controller="ProjectController"> my login code </div> </div> </body> </html> 

和我的angular码是

 var app = angular.module("app", []); app.controller("MainController", ["$scope", function(t) { /* check session if exist or not if not show login*/ t.view='login'; }]),app.controller("SignInController", ["$scope","$http", function(t,$http) { t.signIn = function() { $http({ url: "/login/", data: { email: t.user.email,password:t.user.password }, method: 'POST', }).success(function (data) { console.log(data); //want to show project div t.$emit("view", "project"); }).error(function(err){ t.error = "Invalid Login"; }) }; }]),app.controller("ProjectController", ["$scope", function(t) { }]); 

现在我的脾气不是成功的。 编辑:这里是punker链接http://plnkr.co/edit/I8EEFM8gdplUmNaZoYc6

当我点击loginbutton,我想显示项目切换。

有什么build议么

谢谢

问题是$范围不是你的控制器之间共享。 开始只有一个控制器,所以$ scope是共享的,如你所期望的。

改变你的ExampleController到这个:

 var app = angular.module("switchExample", []); app.controller("ExampleController", ["$scope", function($scope) { $scope.selection ="settings"; $scope.signIn = function() { alert("click"); $scope.selection ="project"; } }]); 

…并删除其他控制器和在HTML中的未使用的控制器的引用将显示'你好',当你点击'login'

我想你错了。 ng-switch的语法是:

<ANY ng-switch="expression"> <ANY ng-switch-when="matchValue1">...</ANY> <ANY ng-switch-when="matchValue2">...</ANY> <ANY ng-switch-default>...</ANY> </ANY>

它消耗一个variables($ scope的成员)并且与事件无关。

而不是t.$emit("view", "project"); 你应该做$scope.view = "project";

请参阅文档底部的示例: https : //docs.angularjs.org/api/ng/directive/ngSwitch

你有没有尝试过:

 <div id="wrap" ng-switch on="view"> 

并设置:

 $scope.view = "project"; 
 <html ng-app="app" ng-csp=""> <body ng-controller="MainController" capture ng-class="view"> <div id="wrap" ng-switch on="view"> <div id="login" ng-switch-when="'login'" ng-controller="SignInController"> my login code </div> <div id="project" ng-switch-when="'project'" ng-controller="ProjectController"> my login code </div> </div> </body> 

使用这个html