$ scope.apply? $ digest已在进行中?

时间:2016-02-23 13:44:05

标签: javascript angularjs cordova ionic-framework

在您说出之前,是的,我已查看了与此问题相关的所有其他链接,但这些链接似乎都不适用于我的情况。

我是Ionic的新手,我正在寻求帮助。

我有一个控制器,

.controller('VideoCtrl', function($scope, $cordovaCapture, VideoService) {

$scope.clip = '';

$scope.captureVideo = function() {
    $cordovaCapture.captureVideo().then(function(videoData) {
        VideoService.saveVideo(videoData).success(function(data) {
            $scope.clip = data;
            $scope.$apply();
        }).error(function(data) {
            console.log('ERROR: ' + data);
        });
    });
};

并打电话给它,

<div class="button-bar">
    <button class="button button-positive" ng-click="captureVideo()">
        Capture a video
    </button>
</div>

应该更新图像,

$scope.urlForClipThumb = function(clipUrl) {
    var name = clipUrl.substr(clipUrl.lastIndexOf('/') + 1);
    var trueOrigin = cordova.file.dataDirectory + name;
    var sliced = trueOrigin.slice(0, -4);
    return sliced + '.png';
}

这会在屏幕上显示......

</div>
    <img ng-src="{{urlForClipThumb(clip) || '//:0'}}" ng-click="showClip(clip)" style="height: 250px; width: 150px;"/>
</div>

但是,图像永远不会更新,$ scope。$ apply();总是返回正在进行的摘要错误?

如果您需要更多信息,请告诉我们! (我已经尝试过安全应用和超时,他们也不会做任何事......)

1 个答案:

答案 0 :(得分:0)

如果VideoService.saveVideo正在使用$q,则会调用digest,因此不再需要$apply。您可以检查摘要是否正在进行并有条件地应用:

if(!$scope.$$phase) {
    scope.$digest();
}