AngularJS-ng-model不会随服务更新

时间:2016-03-18 08:43:14

标签: javascript angularjs ajax jstree angular-ngmodel

我正在研究AngularJS的项目,我在ng-model方面遇到了一些麻烦。我在NgJsTree树(Angular版本的jstree)上有ng-model。我必须使用一组ajax调用和init之后的树构建节点列表。所以我想把我的ajax调用放在一个带有promise的服务中,并且只有当promise在树上解决时才会被解决。该服务工作正常,但ng-model没有更新。

在特殊情况下,这是我的代码:

服务

worker_rlimit_nofile = 2048

如何致电服务

.service('nodeService', function($q, $http){
    return {
        getNode: function(config, $scope){
            var deferred = $q.defer();
            var result_list = [];
            $.each(config.total_path, function (i, item) {
                if(config.total_path.indexOf(config.total_path[i]) == config.total_path.indexOf(config.total_path[config.total_path.length-1])){
                    $scope.id_model = String(config.total_path[i]).split("model_tree_")[1];
                    var url = 'localhost/url1';
                }else{
                    var url = 'localhost/url2';
                }

                $http({
                    method: 'GET',
                    url: url,
                    async: false,
                }).then(function successCallback(response) {
                    for(var j=0;j<response.data.length;j++){
                        result_list.push({
                            "state": "opened",
                            "text": response.data[j].data.title,
                            "map": response.data[j].attr.map,
                            "b_view_page": response.data[j].attr.b_view_page,
                            "parent": config.total_path[i],
                            "rel": response.data[j].attr.rel,
                            "id": response.data[j].attr.id,
                            "icon": response.data[j].icon
                        });
                    }
                    if(i+1 == config.total_path.length){
                        deferred.resolve(result_list);
                    }
                });
            });

            return deferred.promise;
        }
    };

HTML

var myDataPromise = nodeService.getNode(config, $scope);
myDataPromise.then(function(result){
    config.treeData = config.treeData.concat(result);
    ... init tree ...
}

我的ng-model是变量config.treeData。我做错了吗?

对不起我的琐碎问题,但我是一名Angular初学者。

提前致谢

此致

1 个答案:

答案 0 :(得分:1)

我不会将$scope传入服务。

var myDataPromise = nodeService.getNode(config);
myDataPromise.then(function(result){
    config.treeData = config.treeData.concat(result);
    // Or whatever you want to do...
}

另外,将config.treeData = config.treeData.concat(result);更改为 $scope.config.treeData = config.treeData.concat(result);

通过查看你的htlm,看起来你需要将config绑定到控制器中的范围。由于您在html中使用config.treeConfigconfig.treeData,因此您需要确保这些对象绑定到$scope,否则视图将无法了解它们。