我的控制器中有这个功能,我正在使用 ng-repeat 来更新视图。问题是即使我在下面的控制器中使用 $scope.$apply() 视图也没有更新。我可能在这里遗漏了一些东西。
我已经通过调试验证了
$scope.files = promise.file;
正在正确获取值,但与 $scope.files 关联的 ng-repeat 没有得到更新。
控制器:
$scope.prevDirFiles = function(){
var currDir = fileSvc.getCurrDir();
var arr = currDir.split('/');
var rebuildDir = config.rootDirectory;
for(var i=1; i<arr.length-1;i++){
rebuildDir += '/'+arr[i]
}
// Load File based on rebuilt directory path
fileSvc.setPath(rebuildDir);
$scope.$apply(fileSvc.getfiles().then(
function(promise){
$scope.files = promise.file;
}
));
}
服务:
this.getfiles = function(){
var deffered = $q.defer();
var url = config.url + 'api_all';
console.log("Path is: ");
console.log(this.path);
$http({method:'POST', url:url,data: {path:this.path}})
.success(function (data, status, headers, config) {
deffered.resolve(data);
})
.error(function (data, status, headers, config) {
deffered.reject({"status": false});
});
return deffered.promise;
}
有人可以指导我哪里错了。
谢谢。
HTML
<ul class="list" ng-repeat="file in files">
<li class="list-main" ng-click="getFiles('{{file['file-path']}}','{{file['file-name']}}')" >
<img src="images/cloud.png" class="img">
<div class="list-info">
<div class="list-header">{{file['file-name']}}</div>
<!--<div class="list-info-bottom">Last Modified on 01-Aug-2013 15:38:38</div>-->
</div>
</li>
</ul>
绑定到 ng-click 的控制器功能
$scope.getFiles = function(fpath,fname){
var path = fpath +'/'+fname;
fileSvc.setCurrDir(path);
console.log(path);
fileSvc.setPath(path);
fileSvc.getfiles().then(
function(promise){
$scope.files = promise.file;
}
)
}
即使在 $scope.files 上应用 $apply 后,第二个函数 prevDirFiles 也不会更新视图。
$scope.prevDirFiles = function(){
fileSvc.getCurrentWorkingDirectory().then(
function(response){
var arr = response.split('/');
var rebuildDir = config.rootDirectory;
for(var i=1; i<arr.length-1;i++){
rebuildDir += '/'+arr[i]
}
fileSvc.setPath(rebuildDir);
fileSvc.getfiles().then(
function(response){
$scope.$apply($scope.files = response.file);
}
);
})
}