0

コントローラー内にこの関数があり、ビューを更新するために 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 を適用した後でも、2 番目の関数 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);
                }
            );
        })

}
4

1 に答える 1

2

さて、これが機能しない理由がわかりました。app-body の外の index.html に別の ... がありました。実際には、 ng-controller="FilesCtrl" のように prevDirFiles() 関数をトリガーしていたボタンでした。また、ルートでは、以前の FilesCtrl と同じようにコントローラーを持つページを定義しました。angularjsの内部でどのように何が問題になったのか正確にはわかりません(誰かが知っている場合は説明してください)、ヘッダーからコントローラーを削除すると修正されました。

于 2013-08-28T09:04:54.757 に答える