这里的范围问题,我有一个包含 ng-switch 的页面:
<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);
所以它应该只返回字符串,但我得到了上述错误。我错过了什么?
谢谢
汤姆