可能是愚蠢的问题,但我有我的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。搜索= {};对象,瞧……但我不知道为什么它能起作用;]


当前回答

我也面临着同样的问题…… 对我来说有效的解决方法是使用这个关键字..........

警报(this.ModelName);

其他回答

我也遇到了同样的问题,这是由于我没有在控制器顶部首先声明空白对象:

$scope.model = {}

<input ng-model="model.firstProperty">

希望这对你有用!

由于没有人提到这一点,这个问题可以通过向绑定属性中添加$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!
    };
}]);

在《用AngularJS掌握Web应用程序开发》一书第19页中写道

避免直接绑定到作用域的属性。双向数据绑定到 对象的属性(在作用域上公开)是首选方法。作为一个 方法提供的表达式中应该有一个点 Ng-model指令(例如,Ng-model ="thing.name")。

作用域只是JavaScript对象,它们模仿dom层次结构。根据JavaScript原型继承,作用域属性是通过作用域分开的。为了避免这种情况,应该使用点符号来绑定ng-models。

看看这小提琴http://jsfiddle.net/ganarajpr/MSjqL/

我有(我想!)做了你一直在做的事情,看起来很有效。你能检查一下什么对你不起作用吗?

为表单控件提供name属性