0

完全な angularjs 初心者です。うまくいけば、私はある程度順調に進んでいます。

次のように構成されたデータコンテキストがあります

(function () {
'use strict';

var serviceId = 'datacontext';
angular.module('app').factory(serviceId, ['common', '$http', datacontext]);

function datacontext(common, $http) {
    var $q = common.$q;

    var service = {
        getCustomerGroups: getCustomerGroups
    };

    return service;


    function getCustomerGroups() {
        var groups = [];

        $http({ method: 'GET', url: '/api/getgroups' }).
                success(function (data, status, headers, config) {
                        console.log(status);
                        console.log(headers);
                        console.log(data);
                        groups = data;
                        return $q.when(groups);

            }).
error(function (data, status, headers, config) {
    console.log(data);
    // called asynchronously if an error occurs
    // or server returns response with an error status.
});
          return $q.when(groups);
    }
}
})();

私の見解では、ngTagsInputを使用しています

                        <tags-input ng-model="groups"
                                display-property="GroupName"
                                placeholder="Add Customer Group"
                                enableeditinglasttag="false"
                                class="ui-tags-input"
                                replace-spaces-with-dashes="false">
                    </tags-input>

そして最後に私のコントローラー

(function () {
'use strict';
var controllerId = 'customers';
angular.module('app').controller(controllerId, ['common','$scope','$http','datacontext', customers]);

function customers(common,$scope,$http,datacontext) {

    var vm = this;
    vm.title = 'Customers';
    $scope.groups = [];


    function getGroups() {
        return datacontext.getCustomerGroups().then(function (data) {
            return $scope.groups = data;
        });
    }

    activate();

    function activate() {
        var promises = [getGroups()];
        common.activateController(promises, controllerId)
            .then(function() {

            }
       );
    }



}
})();

エラーは発生しておらず、$http の成功メソッドで正しいデータが返されていることがわかります。ただし、タグは設定されていません。$http が完了する前にタグがデータソースを呼び出しているためですか?

4

1 に答える 1

0

$q.when がどのように機能するかはわかりませんが、約束を返しますが解決しません。defer api を使用する必要があります。

だからスタートセットで

var defer = common.$q.defer();

成功したら、defer.resolve を実行します。

 success(function (data, status, headers, config) {
                        console.log(status);
                        console.log(headers);
                        console.log(data);
                        groups = data;
                        defer.resolve(data);

そして、それが機能するかどうかを確認してください。

于 2014-06-22T09:10:13.620 に答える