在我的angularjs控制器中获取ng-change字段的值

Chr*_*ris 2 input angularjs angularjs-scope angularjs-ng-change angularjs-templates

在我看来,我有这条线:

<input placeholder="Search" type="text" ng-change="searchChange()" ng-model="mySearch" ng-model-options="{debounce: 1000}">
Run Code Online (Sandbox Code Playgroud)

然后我的控制器里面有:

angular.module('app.controllers', [])

.controller('listViewCtrl', ['$scope', '$stateParams', '$http',
function ($scope, $stateParams, $http) {

    $http.get('http://www.domain.co.uk/api/search.php').
        then(function(response) {
            $scope.food = response.data;
        });

    $scope.searchChange = function() {
        console.log($scope.mySearch);   
    };         

}])
Run Code Online (Sandbox Code Playgroud)

但这给了我"未定义".

如何在控制器中引用mySearch输入字段的值?

Dan*_*iel 9

您的输入字段可能位于sperate范围内,该范围未正确更新.ngIf并且ng-repeat是创建单独子范围的指令的常见示例.(有关范围的更多信息,请参阅此文章)

虚线范围变量

为了保护自己免受此类问题的影响,您可以将变量存储在对象中.

<input placeholder="Search" type="text" ng-change="searchChange()" ng-model="my.search" ng-model-options="{debounce: 1000}">


$scope.my = {search: ""};
$scope.searchChange = function() {  
    console.log($scope.my.search);
}; 
Run Code Online (Sandbox Code Playgroud)

命名控制器

或者按照角度样式指南Y030中的建议专门命名控制器.

将变量作为参数传递

第三个选项是将变量作为参数传递给函数:

<input placeholder="Search" type="text" ng-change="searchChange(mySearch)" ng-model="mySearch" ng-model-options="{debounce: 1000}">



$scope.searchChange = function(mySearch) {  
    console.log(mySearch);
}; 
Run Code Online (Sandbox Code Playgroud)