状态改变后在控制器上调用事件

时间:2015-11-07 19:34:55

标签: angularjs angular-ui-router

我正在为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事件。但是,每次运行都很顺利。这几乎就像国家第一次改变时一样,事件没有时间进行自我注册。

我只是想将选定的用户传递给编辑表单。

如何让它发挥作用?

1 个答案:

答案 0 :(得分:0)

如果要跨多个控制器传递用户,最好创建一个服务来处理当前选择/正在编辑的用户。这样就可以避免遇到尚未实例化下一个控制器的问题。服务是单身人士,所以他们不会有这种竞争条件。

因此,您可以使用:

,而不是使用$ rootScope.broadcast()
var x = function(v){
var context = this;
this.test = v;
this.show = function(){
    console.log('test', context.test)
});