使用控制器作为语法定义和访问$ rootScope

时间:2015-11-13 16:39:50

标签: angularjs

当我需要定义$ rootScope变量值时,我在使用print(NumberPlates) TimestakenForeign = {} for key,value in zip(NumberPlates,Timestaken2): TimestakenForeign[key]=value print(TimestakenForeign) print("10 cars have passed Camera A, then Camera B\n") for key,value in TimestakenForeign.items(): speed=distance/int(value) if speed>speedlimit: print(key,"is speeding with",speed,"mps") 时遇到了麻烦。

该过程包括两个主要阶段。

  • 用户未被记录,因此当他处理登录表单时,我会在controller as内的$ rootScope上定义他的个人数据(如姓名和身份证)。
  • 用户已登录(包含localStorage中的数据),因此我将从localStorage获取数据,并在LoginController上设置$rootScope值;

但问题是,由于我对这种类型的语法不熟悉(使用'控制器作为'使用vm attr),.run未被定义,也未被$rootScope访问图。

这就是我正在做的事情:

.RUN

angular
    .module('agApp')
    .run(runAuth);

    /* @ngInject */
    function runAuth($rootScope,factAuth,localStorageService) {

        var user = JSON.parse(localStorageService.get("user"));
        if (user.length > 0) {
            $rootScope.userData = user[0];
        }

        $rootScope.logOut = function() {
            factAuth.logOut();
            $rootScope.userData = '';
            $state.go('login');
        };

    }; //end run

控制器

angular
    .module('agApp')
    .controller('LoginController', LoginController);

    /* @ngInject */
    function LoginController($rootScope,$http,$state,localStorageService,factAutenticacao) {
        var vm = this;
        vm.pageName = 'Login page';

        vm.loginProccess = loginProccess;

        function loginProccess(event) {
            //here i get an $htt to validate the login
            if (!data) {
                alert('login failed')
            } else {
                factAutenticacao.loginProcess();
                localStorageService.set("user", JSON.stringify(data[0]));
                $rootScope.userData = data[0];
                $state.go('app');
            };
        };

    }; //end login controller

顺便说一句,在定义全局函数时也会出现同样的问题,比如“logOut”。功能

在我看来,我试图像这样访问这些数据:

<div class="col-l-12">
    <h3>User: {{::vm.userData.name}}</h3>
    <ul>
        <li> {{::vm.userData.id}}</li>
        <li> {{::vm.userData.location}}</li>
        [.. more code ..]
    </ul>
</div>

由于它是全局变量,我不想将其与特定controller相关联,因为它需要在整个应用中可访问。

有什么问题?

1 个答案:

答案 0 :(得分:1)

视图使用vm.userData,其中vm是控制器本身。因此,如果您希望这样做,userData必须是控制器的字段,而不是根范围的字段:

vm.userData = data[0];

而不是

$rootScope.userData = data[0];

或者,如果你真的想在$ rootScope上存储它,那么视图应该使用

{{ userData.name }}

从控制器范围获取userData,并通过继承从根范围获取。

我同意这些意见:不应该在根范围内。它应该在专用服务中,注入任何控制器需要访问用户数据。