如何从angularjs中select的ng更改调用服务方法?

如何从angularjs中select的ng更改调用服务方法?,angularjs,angularjs-directive,angularjs-service,angularjs-factory,angularjs-ng-change,Angularjs,Angularjs Directive,Angularjs Service,Angularjs Factory,Angularjs Ng Change,我是新手。我试图从select的ng更改调用工厂服务方法“getScoreData”,但无法完成。请帮忙 Html代码: <select ng-model="Score" ng-change="getScoreData(Score)" ng-options="c.name for c in Scores"></select> 上面是服务工厂方法及其在控制器中的实例化。我尝试从ng更改select实例化,但它既没有给出错误,也没有被调用。您的代码中至少有两个问题:

我是新手。我试图从select的ng更改调用工厂服务方法“getScoreData”,但无法完成。请帮忙

Html代码:

<select ng-model="Score" ng-change="getScoreData(Score)" ng-options="c.name for c in     Scores"></select>

上面是服务工厂方法及其在控制器中的实例化。我尝试从ng更改select实例化,但它既没有给出错误,也没有被调用。

您的代码中至少有两个问题:

  • ng change=“getScoreData(Score)

    Angular没有看到引用已定义服务的
    getScoreData
    方法

  • getScoreData:函数(分数、回调)

    我们不需要使用回调,因为
    GET
    返回承诺。请改用
    then

下面是一个工作示例(我使用随机地址仅用于模拟):

HTML

<select ng-model="score"
        ng-change="getScoreData(score)" 
        ng-options="score as score.name for score in  scores"></select>
    <pre>{{ScoreData|json}}</pre> 
演示

<select ng-model="score"
        ng-change="getScoreData(score)" 
        ng-options="score as score.name for score in  scores"></select>
    <pre>{{ScoreData|json}}</pre> 
var fessmodule = angular.module('myModule', ['ngResource']);

fessmodule.controller('fessCntrl', function($scope, ScoreDataService) {

    $scope.scores = [{
        name: 'Bukit Batok Street 1',
        URL: 'http://maps.googleapis.com/maps/api/geocode/json?address=Singapore, SG, Singapore, 153 Bukit Batok Street 1&sensor=true'
    }, {
        name: 'London 8',
        URL: 'http://maps.googleapis.com/maps/api/geocode/json?address=Singapore, SG, Singapore, London 8&sensor=true'
    }];

    $scope.getScoreData = function(score) {
        ScoreDataService.getScoreData(score).then(function(result) {
            $scope.ScoreData = result;
        }, function(result) {
            alert("Error: No data returned");
        });
    };

});

fessmodule.$inject = ['$scope', 'ScoreDataService'];

fessmodule.factory('ScoreDataService', ['$http', '$q', function($http) {

    var factory = {
        getScoreData: function(score) {
            console.log(score);
            var data = $http({
                method: 'GET',
                url: score.URL
            });


            return data;
        }
    }
    return factory;
}]);