访问angularjs中的javascript变量

时间:2014-11-21 05:29:38

标签: 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";
    }

路线

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

在abobe路由中userEditid应为3或其他东西,但显示为0

1 个答案:

答案 0 :(得分:0)

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

我会在这做两件事:

  1. 将您的变量保存在服务中,这样就不会使用全局变量
  2. 拥有一个主模板,该模板使用ng-include,其模板由var
  3. 确定

    服务中的变量:

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

    就这么简单。