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=this然后我用应该公开的成员和可绑定到视图的数据装饰vm
<代码>虚拟机
仅表示查看模式
这对我来说有三件事
- 提供在我的控制器中创建绑定的一致且可读的方法
- 消除处理此作用域或绑定的任何问题(即嵌套函数中的闭包)
- 从控制器中删除
,除非我明确需要它用于其他用途$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)