2016-04-16 7 views
0

Ich bin nicht in der Lage, eine im Service deklarierte Funktion an einen Controller zu binden. Ich versuche im Grunde, die OnChange-Funktion im Dienst an die OnChange-Funktion im Controller $ Scope zu binden. ich diesen Fehler:

angular.js:13424 TypeError: Cannot set property 'onChange' of undefined

Hier ist mein Service

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); 
    }); 
} 
}); 

Und Controller:

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);   
}); 
}]); 

Können Sie mir bitte helfen

+0

der Controller-Code nicht gültig sieht. Ist das "Erfolg" am richtigen Ort? –

Antwort

2

Nur eine Korrektur Ahmed Antwort. Sie müssen die Servicemethode als Referenz und nicht als Ergebnis der Ausführung angeben. So muss der Code oben aktualisiert werden wie:

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);   
    }); 
}]); 
2

Ich glaube, Sie einfach den $scope.onChange = myService.onChange(); an der falschen Stelle, versuchen Sie:

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);   
}); 
}]); 
2

Nach Ahmed Antwort, Wenn Sie an die Funktion gebunden werden soll und nicht auf das Ergebnis der Funktion, Sie müssen auf sein Ergebnis zu funktionieren und nicht. In Ihrem Fall:

$scope.onChange = myService.onChange; 

und nicht:

$scope.onChange = myService.onChange(); 
0

Dies ist der Fehler

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

Es gibt einen Punkt . nach dem

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

dass mit Semikolon ersetzen, weil Javascript verstehen, dass auf diese Weise

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

Dank

Verwandte Themen