我正在研究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初学者。
提前致谢
此致
答案 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.treeConfig
和config.treeData
,因此您需要确保这些对象绑定到$scope
,否则视图将无法了解它们。