我想钩住一些变量直到AngularJS中的一个函数,虽然他们似乎是使它到前端,前端所做的更改不会传输到后端。控制器功能看到变量的旧版本
这里是身体的相关部分:
<body ng-controller="main-controller">
<div ng-show="show_login" ng-include="'/racket-web/view/login.html'">
</body>
而且它所包含
<table>
<tr>
Email <input ng-model="login_email"/> {{login_email}} <br>
Pass <input type="password" ng-model="login_password"/> {{login_password}}<br>
<button ng-click="exec_login()">Login</button>
</tr>
</table>
这里是我的控制器
app.controller('main-controller', function($scope) {
$scope.login_email = 'abcd';
$scope.login_password = 'defg';
$scope.changeView = function(view) {
$scope['show_login'] = false;
// other views snipped
$scope['show_' + view] = true;
}
$scope.changeView('login');
$scope.exec_login = function() {
var email = $scope.login_email;
var pass = $scope.login_password;
alert('logging in ' + email + ' ' + pass);
}
当我跑我的网页,我看到我的按预期发送电子邮件并传递输入,并且当我编辑它们时,输入旁边的调试值会相应更改。但是,当我单击该按钮时,警报箱仍具有原始值。
如何获取函数内部获取的值以在输入框中查看最新版本?我知道我可以用VanillaJS来抓住他们,但我宁愿使用适当的Angular!
这里是我所看到的screengrab:
它看起来像你遇到了一个不直观的原型继承功能。请参阅http://stackoverflow.com/a/18128502/76512。基本上,如果你使用的是ng-model,你应该在你分配的任何模型中有一个点,否则该值将被分配给本地范围而不是父级。当你为它创建一个新的作用域时,你将这个值分配给本地作用域,而不是你原来的作用域 –
@DustinHodges这似乎与我达成的结论是一致的(请参阅我自己的回答) - 不要不使用顶级范围。对于那些不知道答案的人(比如我),这个问题(和其他问题)似乎并不是很容易搜索到的。对于那些确实知道要搜索什么的人来说,这非常有用,但可以快速帮助发布帖子的人。我希望这个问题最终可以为未来的提问者搜索。 – corsiKa
了解。当你第一次出发时很难弄清楚什么是错误的。关于这个问题有很多信息,只是谷歌“总是在angularjs中使用点”。不幸的是,你和其他初学者,你永远不知道寻找。希望这个问题和你的回答将指向其他人正确的方向。 –