我正在尝试访问javascript变量,然后在控制器中更改它,然后在路由中使用它..但它显示的是同一个旧的。
var userEditid = 0;
app.controller("cn_newuser", function ($scope,$window) {
editUser = function (this_) {
$window.userEditid = this_.firstElementChild.value;
alert(userEditid);
//window.location.path("#/edit_user");
//$window.location.href = "#/edit_user";
}
路线
.when("/edit_user", {
templateUrl: "/master/edituser/" + userEditid //userEditid should be 3 or some thing else but is showing 0
})
在abobe路由中userEditid应为3或其他东西,但显示为0
答案 0 :(得分:0)
这是因为在应用实例化时会评估.when()
,当这个全局变量(实际上并不是一个好主意)设置为0
时,而不是在运行控制器时。如果您试图说“加载模板,但模板名称应根据特定变量而有所不同”,那么您的工作方式就不会起作用。
我会在这做两件事:
服务中的变量:
app.controller("cn_newuser", function ($scope,UserIdService) {
$scope.editUser = function (this_) {
UserIdService.userEditid = this_.firstElementChild.value;
$location.path('/edit_user');
}
});
另请注意,我将其更改为使用$location.path()
主模板:
.when("/edit_user", {
templateUrl: "/master/edituser.html", controller: 'EditUser'
});
EditUser控制器:
app.controller("EditUser", function ($scope,UserIdService) {
$scope.userTemplate = '/master/edituser/'+UserIdService.userEditId;
});
然后edituser.html将是:
<div ng-include="userTemplate"></div>
当然,我会问你为什么要为每个用户提供一个单独的模板,而不是一个由Angular动态修改的模板,但这不是你提出的要求。
编辑:
服务就像是
app.factory('UserIdService',function() {
return {
userEditId: null
}
});
就这么简单。