AngularJS控制器$范围

时间:2015-05-05 01:49:19

标签: angularjs angularjs-scope angularjs-controller

我的angularJS应用程序中的每个站点都有一个控制器。 在这种情况下,我有一个网站,其中包含用于创建用户的表单,如果提交了表单,则用户将导航到成功页面,该页面汇总用户创建并提供有关已创建用户的信息。

底部有两个控制器。我的方法是在服务器响应后,我在$ rootScope中设置用户名,密码和角色。然后我导航到“usercreateresponse”页面,之后我使用{{username}},{{password}}和{{roles}}查看此属性。

这个工作到目前为止但我对这种方法有一个问题:如果我重新加载页面“usercreateresponse”,那么用户名,密码和角色的值都不会显示,实际上我不知道为什么,因为我已经设置了值rootscope(所以我相信rootScope可能会通过刷新来清理?!)

我现在的问题是,如果我的方法还可以,或者是否有更好的解决方案(例如,通过参数传输值?,只有一个控制器用于用户处理?)。 非常感谢!

function CreateUserController($scope, $http, $location, $rootScope,  $cookieStore) {    
$scope.createUser = function(data) {
    var dataObj = {
            username : $scope.username,
            password : $scope.password,
            roles: [$scope.role]
    };  
    var res = $http.post('/users/createUser', dataObj);
    res.success(function(data, status, headers, config) {
        $rootScope.username = data.username;
        $rootScope.password = data.password;
        $rootScope.role = data.roles;
        $rootScope.id = data.id;

        $location.path("usercreateresponse");
    });
    res.error(function(data, status, headers, config) {
        alert( "failure message: " + JSON.stringify({data: data}));
    });     
   }
 }

成功创建用户的控制器:

function CreateUserResponseController($scope) {
 }

1 个答案:

答案 0 :(得分:0)

为什么不使用$ emit或$ broadcast来传输包含用户名,密码等的数据对象

$scope.$emit('userCreated', data);

在CreateUserController成功并通过

收听
$scope.$on('userCreated', function(newVal, oldVal) {

$scope.userName = newVal.userName;
 ....
});

在usercreateresponse(CreateUserResponseController)