将服务中的函数绑定到$scope(错误:无法设置undefined的属性'onChange')

Bind a function in service to $scope (Error: Cannot set property 'onChange' of undefined)

本文关键字:设置 undefined 属性 onChange 错误 绑定 函数 服务 scope      更新时间:2023-09-26

我无法将服务中声明的函数绑定到控制器。我基本上是在尝试将服务中的onChange函数绑定到控制器$scope中的onChange函数。我得到这个错误:

angular.js:13424类型错误:无法设置未定义的属性"onChange"

这是我的服务

app.service('myService', function($http, $rootScope) {
this.selected = {
        item: '' 
}
this.getData = function(key){
    return $http.get('/myapp/stocklist/AMZN');
}
this.gs = [];
var sr = [];
this.siri=[];
var vm=this;
this.cleanData = function(response){
    for( var i=0; i<response.data.length; i++ ) {
        vm.gs.push(response.data[i].name);
        sr.push(response.data[i].high);
    }                       
    vm.siri.push(sr);
}
this.onChange = function(key){
    vm.getData(key).then(function(response){
        vm.cleanData(response);
        console.log(vm.siri);
    });
}
});

控制器:

app.controller('select', ['$scope', '$http', 'myService', function($scope,$http, myService) {
$scope.selected = myService.selected;   
$http.get('/myapp/stocknames').
$scope.onChange = myService.onChange(); // why is this giving error? how do I do it?
success(function(data) {
    $scope.names=data;
    console.log($scope.names);          
});
}]);

你能帮吗

只是对Ahmed答案的更正。您需要将服务方法作为引用,而不是执行它的结果。因此,上面的代码需要更新为:

app.controller('select', ['$scope', '$http', 'myService', function($scope,$http, myService) {
   $scope.selected = myService.selected;   
   $scope.onChange = myService.onChange;
   $http.get('/myapp/stocknames').
     success(function(data) {
       $scope.names=data;
       console.log($scope.names);          
     });
}]);

我认为你只是把$scope.onChange = myService.onChange();放错了地方,试试:

app.controller('select', ['$scope', '$http', 'myService', function($scope,$http, myService) {
$scope.selected = myService.selected;   
$scope.onChange = myService.onChange();
$http.get('/myapp/stocknames').
success(function(data) {
    $scope.names=data;
    console.log($scope.names);          
});
}]);

Ahmed回答后,如果你想绑定到函数而不是函数的结果,你必须设置为函数,而不是他的结果。在您的情况下:

$scope.onChange = myService.onChange;

而不是:

$scope.onChange = myService.onChange();

这是错误

$http.get('/myapp/stocknames').$scope.onChange=myService.onChange();

后有一个点.

$http.get('/myapp/stocknames')

将其替换为分号,因为javascript以这种方式理解

$http.get('/myapp/stocknames').$scope.onChange=myService.onChange();

感谢