ng-model 值在控制器中未定义
ng-model value is undefined in controller
我正在尝试制作一个视图,该视图仅通过 ng-model 接收电子邮件和密码,然后通过 ng-click 将其传递给控制器中的登录功能。我似乎无法让它正常工作,过去关于作用域继承和 $parent 的帖子似乎没有为我解决问题。
ng 模型位于 ion-content 和标签下,这就是我的假设导致范围继承问题的原因。此外,视图 {{user.email}} 中发生的数据绑定永远不会更新。
这里是一个 plunker,我试图在其中重现我的问题:http://plnkr.co/edit/JFlO64xi4nG84xqFDYsv?p=info
HTML
<body ng-controller='MyCtrl'>
<ion-content>
<div class="list">
<label class="item item-input">
<input type="email" placeholder="Enter Email" ng-model="user.email">
</label>
<label class="item item-input">
<input type="email" placeholder="Enter Password" ng-model="user.password">
</label>
{{user.email}}
{{user.password}}
<button class="button button-block button-positive" ng-click="login(user.email,user.password)">Log in</button>
</div>
</ion-content>
</body>
JavaScript
angular.module('starter', ['ionic'])
.controller('MyCtrl', function($scope) {
$scope.user = {
email: '',
password: ''
}
$scope.login = function(email,password) {
console.log("email is: ",email); // will log undefined
console.log("password is",password); // will log undefined
};
})
我试过 $parent.user.email 但这也不起作用。有人可以帮我弄清楚这里出了什么问题吗?
您已设置 type="email"
,这将导致进行验证。当一个字段无效时,底层模型将不会更新。将 input
更改为 type="text"
以查看差异。
有关详细信息,请参阅 input[email]
上的 the docs。
在您的 HTML 中,尝试将类型更改为文本并将字段 "name" 添加到您的输入中,例如:
<input name="email" type="text" placeholder="Enter Email" ng-model="user.email">
名称必须与您的对象(模型)属性相同,在您的情况下,您的对象(模型)用户的属性是"email"。
所以其他输入应该是这样的:
<input name="password" type="text" placeholder="Enter Password" ng-model="user.password">
这里你的对象(模型)用户的属性是密码,所以名字也是"password"。
希望对您有所帮助!
需要更改。
<input name="email" type="email" placeholder="Enter Email" ng-model="user.email">
<input name="password" type="password" placeholder="Enter Password" ng-model="user.password">
测试时不要忘记输入电子邮件地址。井验证是另一个问题
显然这是一个众所周知的问题 -> https://github.com/driftyco/ionic/issues/555
解决方案:只需将您的 ionic 升级到 1.1.1.
正如@stevuu 指出的那样,您应该/也可以将输入 type
设置为 text
- 在输入 email
后,内容将被验证并且 return undefined
如果 user.email
不是有效的电子邮件。
进行这两项更改后,它就起作用了。
分叉 plnkr -> http://plnkr.co/edit/yPiFQkzfNJFDr1gOWFry?p=preview
您还可以利用 type="email"
并在电子邮件无效时显示错误消息:
<input type="email" placeholder="Enter Email" ng-model="user.email">
...
{{ error }}
$scope.login = function(email,password) {
$scope.error = !email ? 'Email is not valid' : '';
console.log("email is: ",email);
console.log("password is",password);
};
我正在尝试制作一个视图,该视图仅通过 ng-model 接收电子邮件和密码,然后通过 ng-click 将其传递给控制器中的登录功能。我似乎无法让它正常工作,过去关于作用域继承和 $parent 的帖子似乎没有为我解决问题。
ng 模型位于 ion-content 和标签下,这就是我的假设导致范围继承问题的原因。此外,视图 {{user.email}} 中发生的数据绑定永远不会更新。
这里是一个 plunker,我试图在其中重现我的问题:http://plnkr.co/edit/JFlO64xi4nG84xqFDYsv?p=info
HTML
<body ng-controller='MyCtrl'>
<ion-content>
<div class="list">
<label class="item item-input">
<input type="email" placeholder="Enter Email" ng-model="user.email">
</label>
<label class="item item-input">
<input type="email" placeholder="Enter Password" ng-model="user.password">
</label>
{{user.email}}
{{user.password}}
<button class="button button-block button-positive" ng-click="login(user.email,user.password)">Log in</button>
</div>
</ion-content>
</body>
JavaScript
angular.module('starter', ['ionic'])
.controller('MyCtrl', function($scope) {
$scope.user = {
email: '',
password: ''
}
$scope.login = function(email,password) {
console.log("email is: ",email); // will log undefined
console.log("password is",password); // will log undefined
};
})
我试过 $parent.user.email 但这也不起作用。有人可以帮我弄清楚这里出了什么问题吗?
您已设置 type="email"
,这将导致进行验证。当一个字段无效时,底层模型将不会更新。将 input
更改为 type="text"
以查看差异。
有关详细信息,请参阅 input[email]
上的 the docs。
在您的 HTML 中,尝试将类型更改为文本并将字段 "name" 添加到您的输入中,例如:
<input name="email" type="text" placeholder="Enter Email" ng-model="user.email">
名称必须与您的对象(模型)属性相同,在您的情况下,您的对象(模型)用户的属性是"email"。 所以其他输入应该是这样的:
<input name="password" type="text" placeholder="Enter Password" ng-model="user.password">
这里你的对象(模型)用户的属性是密码,所以名字也是"password"。
希望对您有所帮助!
需要更改。
<input name="email" type="email" placeholder="Enter Email" ng-model="user.email">
<input name="password" type="password" placeholder="Enter Password" ng-model="user.password">
测试时不要忘记输入电子邮件地址。井验证是另一个问题
显然这是一个众所周知的问题 -> https://github.com/driftyco/ionic/issues/555
解决方案:只需将您的 ionic 升级到 1.1.1.
正如@stevuu 指出的那样,您应该/也可以将输入 type
设置为 text
- 在输入 email
后,内容将被验证并且 return undefined
如果 user.email
不是有效的电子邮件。
进行这两项更改后,它就起作用了。
分叉 plnkr -> http://plnkr.co/edit/yPiFQkzfNJFDr1gOWFry?p=preview
您还可以利用 type="email"
并在电子邮件无效时显示错误消息:
<input type="email" placeholder="Enter Email" ng-model="user.email">
...
{{ error }}
$scope.login = function(email,password) {
$scope.error = !email ? 'Email is not valid' : '';
console.log("email is: ",email);
console.log("password is",password);
};