2016-07-07 24 views
1

我想鉤住一些變量直到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:

enter image description here

+0

它看起來像你遇到了一個不直觀的原型繼承功能。請參閱http://stackoverflow.com/a/18128502/76512。基本上,如果你使用的是ng-model,你應該在你分配的任何模型中有一個點,否則該值將被分配給本地範圍而不是父級。當你爲它創建一個新的作用域時,你將這個值分配給本地作用域,而不是你原來的作用域 –

+0

@DustinHodges這似乎與我達成的結論是一致的(請參閱我自己的回答) - 不要不使用頂級範圍。對於那些不知道答案的人(比如我),這個問題(和其他問題)似乎並不是很容易搜索到的。對於那些確實知道要搜索什麼的人來說,這非常有用,但可以快速幫助發佈帖子的人。我希望這個問題最終可以爲未來的提問者搜索。 – corsiKa

+0

瞭解。當你第一次出發時很難弄清楚什麼是錯誤的。關於這個問題有很多信息,只是谷歌「總是在angularjs中使用點」。不幸的是,你和其他初學者,你永遠不知道尋找。希望這個問題和你的回答將指向其他人正確的方向。 –

回答

0

嗯,這是不可思議的,我不知道爲什麼它不工作,但我沒有找到一個竅門,做工作從長遠來看,這可能是一個好主意。

因爲這不是唯一的視圖,我決定爲我的視圖的變量創建一個對象。無論如何,我已經暗中用view_variable這樣做了。所以我做了我的控制器是這樣的:

app.controller('main-controller', function($scope) { 

    $scope.login = {}; 

    $scope.login.email = 'abcd'; 
    $scope.login.password = 'defg'; 
    // snip 

    $scope.exec_login = function() { 
     var email = $scope.login.email; 
     var pass = $scope.login.password; 
     alert('logging in ' + email + ' ' + pass); 
    } 

更新自己的狀態,以使用新的變量login.emaillogin.password代替login_emaillogin_password使他們開始正常工作。

enter image description here

雖然我還是很想知道爲什麼頂級作用域變量沒有正確更新,我很高興看到這個解決辦法確實讓我繼續原型,並在所有誠實,正確確定我的變量的範圍將會減少頭痛。

+0

看看這個:http:// stackoverflow。COM /問題/ 18128323/IF-你 - 是 - 不使用-A-點在你的angularjs的模型 - 你 - 是 - 做 - 它 - 錯誤 – lintmouse

相關問題