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 回答