角度控制器的属性在其功能之外是不可访问的

时间:2015-04-16 12:12:11

标签: javascript angularjs angularjs-scope

我有一个表单,其中包含绑定到session.email属性的两个输入字段(session.pswLoginController.session)。当我单击重置按钮时,我调用LoginController.reset()功能。

我想使用变量sessionDefault (empty)明确会话属性。但是它只运行一次,如果我重置两次表单,sessionDefaultundefined

我怎样才能将它作为控制器的常量属性?

  app.controller('LoginController', function ($scope)
        {
         this.session={};
         var sessionDefault=
              {
                  email : "",
                  psw: ""
              };    

         this.reset = function()
                {  this.session = sessionDefault;  };                       
        });

2 个答案:

答案 0 :(得分:2)

试试这个

用于重置功能只需使用sessionDefault副本重置它,如下所示

vm.reset = function () {
    vm.session = angular.copy(sessionDefault);
};

此处this指的是控制器实例

请注意,我使用var vm = this;然后使用应该公开的成员和可以数据绑定到View的成员来装饰vmvm只表示view modal

这对我来说有三件事。

  • 提供在我的控制器中创建绑定的一致且可读的方法

  • 删除处理此作用域或绑定的任何问题(即嵌套函数中的闭包)

  • 从控制器中删除$scope,除非我明确需要其他内容

<强> Working Demo

<强>脚本

   var app = angular.module('myApp', []);
   app.controller('LoginController', function ($scope) {
     var vm = this;
     vm.session = {};
     var sessionDefault = {
        email: "",
        psw: ""
     };
     vm.reset = function () {
         vm.session = angular.copy(sessionDefault);
     };
});

<强> HTML

<div ng-app='myApp' ng-controller="LoginController as login">
    Email:<input type="text" ng-model="login.session.email"/>{{login.session.email}}
    <br>
    Psw:<input type="text" ng-model="login.session.psw"/>{{login.session.psw}}
    <br>
    <button ng-click="login.reset()">Reset</button>
</div>

看看这些美丽的东西。

AngularJS’s Controller As and the vm Variable

答案 1 :(得分:0)

this.reset = function()
                {  this.session = sessionDefault;  };  

此上下文中的this指的是函数(reset)。如果您想访问“原创”原文。 this您需要将其存储在变量中。

 app.controller('LoginController', function ($scope)
        {
         this.session={};
         var sessionDefault=
              {
                  email : "",
                  psw: ""
              };    

         var self = this;
         this.reset = function()
                {  self.session = angular.clone( sessionDefault);  };                       
        });