2016-07-07 25 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

相关问题