使用 $http 缓存时如何重新触发 ng-if / ng-show 动画

How to retrigger ng-if / ng-show animation when using $http cache

在工厂服务中,我必须使用

$http.get(url, { cache: true })

在我看来,我正在使用 ng-ifng-show 来触发 CSS 转换。


问题:

第一次请求时效果很好,但显然对于相同服务功能的下一次请求,动画不会重新触发。

有没有办法重置/重新触发 ng-if / ng-show 动画?

(需要缓存所以我可以避免等待时间,但我仍然需要在不同状态之间触发不透明动画)。

谢谢!


app.factory('progService', function ($http) {
    var progService= {};
    progService.getProgram = function() {
        return $http.get(appInfo.api_url + 'pages/5', { cache: true});
    };
    return progService;
});


app.controller('programController', function($scope, progService) {
    progService.getProgram().then(function(res){
        $scope.program = res.data;
    });
});


<div ng-if="program.aJsonKey"></div>

在这种情况下,您可能需要设置自己的标志。例如:

app.controller('programController', function($scope, progService) {

    $scope.programDisplay = false;

    progService.getProgram().then(function(res){
        $scope.program = res.data;
        angular.element(document).ready(function () { 
            $scope.programDisplay = true;
        });
    });
});

然后

<div ng-if="program.acf.exerpt && programDisplay"></div>

您的视图未更新,因为您传递的是相同的缓存对象。 为了执行 ngIf 的 $watcher,你应该提供一个 "fresh"/new 对象。您可能还需要更改状态,因为 ngIf 会期望 true 或 false。 所以在你的情况下应该是这样的:

app.controller('programController', function($scope, progService) {
    $scope.program = null;
    progService.getProgram().then(function(res){
        $scope.program = angular.copy(res.data); // Returns a copy of the object. Always a new object!
    });
});