Angularjs 如何在自定义回调中访问angular$作用域?

Angularjs 如何在自定义回调中访问angular$作用域?,angularjs,scope,Angularjs,Scope,我下面的回调函数无法更新/访问我的$scope变量(或者,由于某些原因没有显示更改),我如何实现这一点? 正在调用回调,但我认为这里的javascript范围显然不正确 function ReportsCtrl($scope) { var self = this; $scope.analyticsIsReady = false; $scope.analyticsInitStatus = ''; //$scope.originCompositionChart =

我下面的回调函数无法更新/访问我的$scope变量(或者,由于某些原因没有显示更改),我如何实现这一点? 正在调用回调,但我认为这里的javascript范围显然不正确

function ReportsCtrl($scope) {
    var self = this;
    $scope.analyticsIsReady = false;
    $scope.analyticsInitStatus = '';

    //$scope.originCompositionChart = new Chart__('originCompositionChart', reportsClient.getOriginCompositionData, true, false);
    $scope.originCompositionChart = new Chart__('originCompositionChart', null, true, false);
    $scope.charts = new Array($scope.originCompositionChart);

    $scope.showIncludedCharts = function () {
    };

    //todo not working
    this.updateAnalyticsInitStatus = function (status) {
        console.log('boom; ' + status);
        $scope.analyticsInitStatus = status;
    };

    //todo not working
    this.handleAnalyticsInitSuccess = function (status) {
        $scope.analyticsInitStatus = 'Initialisation complete';
        $scope.analyticsIsReady = true;
    };

    window.analyticsInitialiserClient = new AnalyticsInitialiserClient__(this.updateAnalyticsInitStatus, this.handleAnalyticsInitSuccess);

}

正如@charletfi所建议的,您需要在
$apply
中包装来自外部Angular的回调,以指示Angular运行摘要循环以确定更改

// Should now work
this.updateAnalyticsInitStatus = function (status) {
    $scope.$apply(function () {
        console.log('boom; ' + status);
        $scope.analyticsInitStatus = status;
    });
};

当使用不属于angular scope的事件回调时,更新scope Variables时需要使用
$apply
,这是一个很大的帮助。谢谢