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


当前回答

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

$scope.model = {}

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

希望这对你有用!

其他回答

我只是在使用绑定到body元素的root_controller时遇到了这个问题。然后我在angular路由器中使用ng-view。问题是,当angular将html插入ng-view元素时,总是会创建一个新的作用域。因此,我的“check”函数是在ng-model元素修改的作用域的父作用域中定义的。

要解决这个问题,只需在路由加载的html内容中使用专用控制器。

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

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

警报(this.ModelName);

对我来说,这个问题是通过将我的数据存储到一个对象(这里是“数据”)来解决的。

NgApp。controller('MyController',函数($scope) { 美元的范围。My_title = "";//这在ng-click函数中不起作用 美元的范围。数据= { 'my_title': "", }; 美元的范围。doAction = function() { console.log ($ scope.my_title);//错误值 console.log ($ scope.datas.my_title);// Good Value由'ng-model'绑定 } });

我希望它会有帮助

你可以这样做,在ng键下搜索输入文本,在ng键下点击图标:

<input type="text" ng-model="searchText" ng-keypress="keyEnter(this,$event)" />
<button ng-click="check(searchText)">Check!</button>

in the controller
$scope.search = function (searchText) {
        console.log(searchText);
    }
    $scope.keyEnter = function (serachText,$event) {
        var keyCode = $event.which || $event.keyCode;
        if (keyCode === 13) {//KeyCode for Enter key
           console.log(searchText);
        }
    }