我有以下模块:

angular.module("individual-footprint")
        .controller("individualFootprintController", individualFootprintController)
        .value("currentUser");


该模块的控制器:

 function individualFootprintController($http, individualFootprintService, currentUser) {
        var self = this;
        $http.get("/user").success(function (data) {
            if (data.name) {
                currentUser = data;
                self.authenticated = true;
            }
        })


和以下组件:

angular.module("individual-footprint")
        .component('employeeInfoComponent', {
            template:'Logged in as: <span ng-bind="$ctrl.user"></span>',
            controller: function (currentUser) {
                if (currentUser.name) {
                    self.user = currentUser.name;
                }
            }
        });


我的HTML如下:

<div ng-controller="individualFootprintController as $ctrl">
     <div ng-hide="$ctrl.authenticated">
        <h1>Login</h1>
        With Corporate Account: <a href="/login/corporate">click here</a>
     </div>
     <div ng-show="$ctrl.authenticated" >
         <employee-info-component></employee-info-component>
     </div>


抱歉,我是AngularJS的新手,可能我滥用了某些东西。我的假设是.value("currentUser");是全局变量,我可以注入它并在需要的地方进行更改。但我得到TypeError: Cannot read property 'name' of undefined。您能否为我的全局变量建议更好的解决方案?

最佳答案

您必须为{}值变量将值定义为currentUser(空对象)。当前,您正在组件控制器内执行currentUser.name,因此您尝试从name变量访问undefined属性,因为它会引发错误TypeError: Cannot read property 'name' of undefined

.controller("individualFootprintController", individualFootprintController)
.value("currentUser", {}); //value currentUser defined as blank object

关于javascript - AngularJS:组件和依赖项注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40695568/

10-12 12:36
查看更多