我正在为AngularJs使用UI-Router。这是一段代码:
mc.Controller('usersControllerActions', function ($rootScope, $scope, $state) {
$scope.editedUser = null; // This is set in my code (so it's not null)
$scope.edit = function ($event) {
$event.stopPropagation();
$state.go('users.edit');
$rootScope.$broadcast('setUser', $scope.editedUser);
}
});
mc.controller('usersControllerManager', function ($rootScope, $scope, $state, global) {
$scope.user = {};
$scope.$on('setUser', function (event, user) {
$scope.user = user;
}
}
我的部分路线:
.state('users.edit', {
views: {
'manager@': {
templateUrl: '/areas/users/manage',
controller: 'usersControllerManager',
}
}
})
我的问题是我的路线被调用的第一次时间,并且视图已初始化,未调用setUser
事件。但是,每次运行都很顺利。这几乎就像国家第一次改变时一样,事件没有时间进行自我注册。
我只是想将选定的用户传递给编辑表单。
如何让它发挥作用?
答案 0 :(得分:0)
如果要跨多个控制器传递用户,最好创建一个服务来处理当前选择/正在编辑的用户。这样就可以避免遇到尚未实例化下一个控制器的问题。服务是单身人士,所以他们不会有这种竞争条件。
因此,您可以使用:
,而不是使用$ rootScope.broadcast()var x = function(v){
var context = this;
this.test = v;
this.show = function(){
console.log('test', context.test)
});