Angularjs 无法设置属性';菜单';空的

Angularjs 无法设置属性';菜单';空的,angularjs,Angularjs,我已经在angular.js中创建了一个示例应用程序 此时,它工作得很好,但在控制台中,我得到一个不清楚的错误: TypeError: Cannot set property 'menu' of null at http://localhost/crm/js/controllers/controllers.js:42:29 at F (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:100:187) at

我已经在angular.js中创建了一个示例应用程序 此时,它工作得很好,但在控制台中,我得到一个不清楚的错误:

TypeError: Cannot set property 'menu' of null
at http://localhost/crm/js/controllers/controllers.js:42:29
at F (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:100:187)
at F (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:100:187)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:101:350
at k.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:112:68)
at k.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:109:168)
at k.$apply (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:112:398)
at h (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:72:454)
at u (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:77:463)
at XMLHttpRequest.z.onreadystatechange    (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:79:24) 
我调试我的应用程序,我知道哪里有问题,但无法解决它 “菜单”是我的$scope中的变量:

//editCTRL
app.controller("EditCTRL", function($scope, $routeParams, $http){
var _this = this;

$http.get('api/menu.php?v=edit').then(function(data) {        
    $scope.$parent.menu = data.data;

},function(error){});
});
和第二个ctrl键

//allCTRL
app.controller("AllCTRL", function($scope, $routeParams, $http){
var _this = this;

$http.get('api/menu.php?v=all').then(function(data) {        
    $scope.$parent.menu = data.data;

},function(error){});
});
现在,当我单击菜单中的某个链接(菜单项是dynamics get from api,如show in ctrl)和ng route使用ctrl更改视图(例如allCTRL到editCTRL)时,一切正常,但当我们模拟下载一些大数据时(在api中echo之前添加sleep(1)),我们在链接上单击两次(或更多)(firebug中的2+挂起请求)第一个(从api获取数据后)抛出了一个错误,但最后一个ow请求正确地填充了模型

应用程序工作正常,但这个错误让我害怕,我不知道如何修复它。 有什么想法吗


主控键

//mainCTRL
app.controller("MainCTRL", function($scope, flowHandler){
var _this = this;
$scope.pageTitle = "MainCTRL";
$scope.menu = [];   

});
和视图:

<html ng-app="CRM" ng-controller="MainCTRL">
<head lang="pl">
<meta charset="UTF-8">
<title>{{ pageTitle }}</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="container-fluid">
    <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 main-menu" ng-include src="'js/views/menu.html'">
    </div>
    <div class="col-xs-10 col-sm-10 col-md-10 col-lg-10 fade-container" >
        <div class="fade" ng-view></div>
    </div>
    </div>
</body>
</html>

{{pageTitle}}

这个错误听起来好像$scope和/或$parent为空。当您试图将变量的属性设置为null时,会出现这种类型的错误。我将检查$scope和$parent的值,这将引导您找到错误的原因。

永远不要依赖$scope。$parent是您所期望的。您可能应该使用类似的服务,但我建议您使用$rootScope来管理菜单,而不是解释所有这些

在mainCTRL中,更改
$scope.menu=[]
$scope.$root.menu=[]


在您正在执行的其他控制器中,
$scope.$parent.menu=data.data
,将其更改为
$scope.$root.menu=data.data

编辑、添加视图和mainCTRL,其中初始化菜单界面我不确定该注释的含义是什么。最后,我使用一个独立的服务,我尝试切换到rootScope,然后返回informationError,在切换到rootScope之后,它仍然存在,但您是否像@theJoeBiz所说的那样初始化了菜单?如果是这样,您可能会得到一些错误,但它不应该是您得到的空错误。如果是,那么我必须说$scope为null,因为您现在可能会在尝试初始化菜单的行上出现错误,但是如果$scope为null,这仍然会导致错误。我会说,无论你认为你的作用域变量设置在哪里,它都不是。是的,我初始化菜单,比如@theJoeBiz say!很好,但是当我注入$rootScope并将menu设置为根范围时,就像这样
$rootScope.menu=[]
不像
$scope.$root.menu=[]
它可以工作!谢谢;)