我想鉤住一些變量直到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中使用點」。不幸的是,你和其他初學者,你永遠不知道尋找。希望這個問題和你的回答將指向其他人正確的方向。 –