可能是愚蠢的问题,但我有我的html表单简单的输入和按钮:
<input type="text" ng-model="searchText" />
<button ng-click="check()">Check!</button>
{{ searchText }}
然后在控制器中(模板和控制器由routeProvider调用):
$scope.check = function () {
console.log($scope.searchText);
}
为什么我看到视图更新正确,但在控制台未定义时,单击按钮?
谢谢!
更新:
似乎我已经解决了这个问题(之前不得不提出一些变通办法):
只需要把我的属性名从searchText改为search。文本,然后定义空$scope。搜索= {};对象,瞧……但我不知道为什么它能起作用;]
由于没有人提到这一点,这个问题可以通过向绑定属性中添加$parent来解决
<div ng-controller="LoginController">
<input type="text" name="login" class="form-control" ng-model="$parent.ssn" ng-pattern="/\d{6,8}-\d{4}|\d{10,12}/" ng-required="true" />
<button class="button-big" type="submit" ng-click="BankLogin()" ng-disabled="!bankidForm.login.$valid">Logga in</button>
</div>
还有控制器
app.controller("LoginController", ['$scope', function ($scope) {
$scope.ssn = '';
$scope.BankLogin = function () {
console.log($scope.ssn); // works!
};
}]);
“如果你使用ng-model,你必须在那里有一个点。”
让你的模型指向一个对象。你就可以走了。
控制器
$scope.formData = {};
$scope.check = function () {
console.log($scope.formData.searchText.$modelValue); //works
}
模板
<input ng-model="formData.searchText"/>
<button ng-click="check()">Check!</button>
这种情况发生在子作用域在类似游戏的子路由或ng-repeat中。
子作用域创建自己的值,并产生名称冲突,如下所示:
详见视频片段:https://www.youtube.com/watch?v=SBwoFkRjZvE&t=3m15s
由于没有人提到这一点,这个问题可以通过向绑定属性中添加$parent来解决
<div ng-controller="LoginController">
<input type="text" name="login" class="form-control" ng-model="$parent.ssn" ng-pattern="/\d{6,8}-\d{4}|\d{10,12}/" ng-required="true" />
<button class="button-big" type="submit" ng-click="BankLogin()" ng-disabled="!bankidForm.login.$valid">Logga in</button>
</div>
还有控制器
app.controller("LoginController", ['$scope', function ($scope) {
$scope.ssn = '';
$scope.BankLogin = function () {
console.log($scope.ssn); // works!
};
}]);
控制器为版本(推荐)
这里是模板
<div ng-app="example" ng-controller="myController as $ctrl">
<input type="text" ng-model="$ctrl.searchText" />
<button ng-click="$ctrl.check()">Check!</button>
{{ $ctrl.searchText }}
</div>
JS的
angular.module('example', [])
.controller('myController', function() {
var vm = this;
vm.check = function () {
console.log(vm.searchText);
};
});
示例:http://codepen.io/Damax/pen/rjawoO
最好是在Angular 2中使用component。x或Angular 1.5或更高版本
########
旧方式(不推荐)
不建议这样做,因为字符串是原语,强烈建议使用对象
在标记中试试这个
<input type="text" ng-model="searchText" />
<button ng-click="check(searchText)">Check!</button>
{{ searchText }}
这是你的控制器
$scope.check = function (searchText) {
console.log(searchText);
}