Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度控制器';s属性在其函数之外不可访问_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript 角度控制器';s属性在其函数之外不可访问

Javascript 角度控制器';s属性在其函数之外不可访问,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我有一个表单,它有两个输入字段(session.email和session.psw)绑定到LoginController.session属性。单击重置按钮时,我调用LoginController.reset()函数 我想利用变量sessionDefault(empty)明确session属性。但是它只工作一次,如果我重置两次表单,sessionDefault是undefined 如何使其成为控制器的常量属性 app.controller('LoginController', function

我有一个表单,它有两个输入字段(
session.email
session.psw
)绑定到
LoginController.session
属性。单击重置按钮时,我调用
LoginController.reset()
函数

我想利用变量
sessionDefault(empty)
明确session属性。但是它只工作一次,如果我重置两次表单,
sessionDefault
undefined

如何使其成为控制器的常量属性

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

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

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

vm.reset = function () {
    vm.session = angular.copy(sessionDefault);
};
此处
指的是控制器实例

注意,我使用了
var vm=thisvm
<代码>虚拟机仅表示查看模式

这对我来说有三件事

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

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

  • 从控制器中删除
    $scope
    ,除非我明确需要它用于其他用途

脚本

   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>

电子邮件:{{login.session.Email}

Psw:{{login.session.Psw}
重置
看看这个漂亮的东西

this.reset = function()
                {  this.session = sessionDefault;  };  
本上下文中的
this
指的是功能(
reset
)。如果要访问“原始”
,需要将其存储在变量中

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

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

这不是答案,它不起作用。这只是我的不工作代码。我评论的评论被删除了,对不起。。好的,没关系:)这段代码和我的一样,只重置一次。第二次,它不起作用anymore@DeLac我已经更新了我的答案,检查工作演示是否正常!伟大的非常感谢。所以我需要
vm.session=angular.copy(sessionDefault)
而不是
vm.session=sessionDefault
我想知道为什么。。我不知道这个函数。@DeLac是angularjsit提供的一种深度复制功能,很有意义。然而,与其他解决方案一样,它只工作一次。我不明白为什么..根据@Nidhish,似乎需要angular.copy(sessionDefault)