Angularjs 无法设置属性';菜单';空的
我已经在angular.js中创建了一个示例应用程序 此时,它工作得很好,但在控制台中,我得到一个不清楚的错误: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
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=[]
它可以工作!谢谢;)