2014-11-21 58 views
0

我想访问javascript变量,然后在控制器中更改它,然后在路由中使用它..但它显示的是同一个旧的。在angularjs中访问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"; 
    } 

中的Abobe路线userEditid路线

.when("/edit_user", { 
    templateUrl: "/master/edituser/" + userEditid //userEditid should be 3 or some thing else but is showing 0 
}) 

应该是3或者一些别的东西,但正显示出0

回答

0

这是因为.when()是在应用实例,当这个全局变量进行评估(这实际上并不是一个好主意)设置为0,而不是控制器运行时。如果你试图说,“加载模板,但模板名称应该根据特定变量而变化”,那么你正在做的方式是行不通的。

我会做两两件事在这里:

  1. 保存在服务您的变量,所以你不要有全局变量玩
  2. 有一个主模板,它使用了NG-包括,其中有通过VAR

变量在服务确定的模板:

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 
    } 
}); 

至于这么简单。

+0

谢谢...我是新来的角...你可以告诉我什么是服务代码\ – user2601893 2014-11-21 06:20:23

+0

是的,你有一个小提琴的地方? – deitch 2014-11-21 06:36:06

+0

不要太难过;角度是神话般的,但学习曲线陡峭,教程是可怕的。但越来越多,每天上网。 – deitch 2014-11-21 06:39:22