ngTagsInput不从角$ http填充

时间:2014-06-22 08:47:40

标签: angularjs ng-tags-input

我是一个完整的angularjs新手。所以希望我有点走上正轨。

我有一个像

一样配置的datacontext
(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完成之前调用了数据源吗?

1 个答案:

答案 0 :(得分:0)

我不确定$ q.when是如何工作的,但是它会返回promise而不解决它。你应该推迟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);

看看它是否有效。