范围的问题,我有一个页面,包括NG-开关:AngularJS范围对象这里
<div ng-switch on="pagename()">
<div ng-switch-when="plans">
<div ng-include="'/assets/angular/plans/existingplans.html'"></div>
</div>
<div ng-switch-when="new">
<div ng-include="'/assets/angular/plans/newplans.html'"></div>
</div>
<div ng-switch-when="credits">
<div ng-include="'/assets/angular/plans/creditspanel.html'"></div>
</div>
<div ng-switch-when="wizard">
<div ng-include="'/assets/angular/plans/wizard.html'"></div>
</div>
</div>
正如你可以看到我打开控制器的方法,这种方法势必会一个范围变量,它附带一个RESTful数据源:
$scope.pagename = function() {
var loc = $location.path().split("/").pop();
if (loc == "plans" && $scope.plansinfo.data.length <1) {
return "wizard";
} else if (loc == "plans" && $scope.plansinfo.data.length >=1){
return "plans";
} else if(loc == "new"){
return "new";
}
else if(loc == "wizard"){
return "wizard";
}
else {
// alert(loc)
console.log(loc);
console.log(typeof $scope.plansinfo.data);
return "credits";
}
};
其基本思想是将用户驱动到正确的页面。问题出在你登陆的那个页面上,并且附加了$ scope.plansinfo数据源对象,但是当你遍历页面的时候,其他页面没有定义这个对象。
所以简而言之,我在控制器中做了什么错误,以便在嵌套的作用域中创建对象,而不是顶级作用域?
感谢
汤姆
==== ====编辑
在试图清理东西我也跟着下面的建议,将代码移动到服务,但现在我得到的是:
TypeError: string is not a function
这里是我的尝试:
.factory('PlansData', function() {
var data = {};
data.plansinfo = {};
return {
updateinfo: function(newdata) {
data.plansinfo = newdata;
},
pagename: function (location) {
return 'credits';
},
plansinfo: data
}
})
控制器:
$scope.pagename = PlansData.pagename($location);
所以它应该只是返回字符串,而是我得到上述错误。我错过了什么?
感谢
汤姆
尝试设置'在'$ rootScope' $ scope.plansinfo'。这应该让你不管你是什么样的孩子目前的范围英寸 –
在哪个位置要设置$ scope.plansinfo –
嗨阿贾伊,乔纳森访问它,该rootscope思想的伟大工程,但我不知道如何“最佳实践”它是。我在PlansCtrl控制器中设置了plansinfo变量,他们都是共享的,我之前尝试过使用嵌套的Controller,但似乎没有获得任何地方。 – magicaltrout