【发布时间】:2015-11-06 10:40:31
【问题描述】:
我正在使用 ionic,我有以下观点:
<ion-view hide-nav-bar="true" ng-controller="loginController" class="login-view">
<ion-content class="padding">
<div class="row row-center">
<div class="col">
<div id="logo"></div>
<form>
<div class="list">
<label class="item item-input">
<input type="text" placeholder="Membership No" ng-model="membershipNo">
</label>
<label class="item item-input">
<input type="password" placeholder="Password" ng-model="password">
</label>
</div>
<button class="button button-block button-positive button-login" ng-click="login()">
Login
</button>
</form>
</div>
</div>
</ion-content>
</ion-view>
还有我的控制器:
app.controller('loginController', ['$scope', '$localstorage',
function($scope, $localstorage) {
$scope.membershipNo;
$scope.password;
$scope.login = function () {
console.log("User logged in with membership no: " + $scope.membershipNo +
"\n and password: " + $scope.password);
}
}
]);
我不明白的是,当我单击按钮时,登录功能被正确调用。此外,如果我在控制器中将$scope.membershipNo 设置为“香蕉煎饼”之类的内容,则视图实际上会更新。
然而,当登录功能实际运行时,说membershipNo 和password 是未定义的。我对 Angular 和 Ionic 还很陌生,所以我知道这可能是一些 n00b 错误......
【问题讨论】:
-
您正在绑定到一个原语。不要那样做。 codelord.net/2014/05/10/…(本质上,
membershipNo的值是按值传递的,所以改变的不是控制器中的引用。创建一个对象,类似于$scope.user = {}并传递ng-model="user.membershipNo",否则 Angular 无法发送数据传回控制器...) -
@DRobinson 说了什么。您可以通过使用 controllerAs 语法来避免这种情况,同时使您的代码在此过程中更加优雅和面向未来:-)
-
@Rahil 只有在
ngController和ngModel之间没有创建新范围时才有效。这是非常糟糕的做法。你真的想要你的ngModel中的“点”,每次。 总是。 stackoverflow.com/a/17186640/624590(它也不适用于 Dean,因为ionContent创建了一个范围。) -
我小时候曾经拥有过一台望远镜,但它从来没有真正能看得很远。虽然站在我的房间里看起来确实很酷。
标签: angularjs ionic-framework ionic