有没有办法使$ broadcast在初始化阶段将变量传播到$ on?

<div ng-app='test'>
    <div ng-controller='testCtrl'> <span>{{testContent}}</span>
    </div>
    <div ng-controller="testCtrl2">
        <input type='text' ng-change="updateContent()" ng-model="testContent2" />
    </div>
</div>
var app = angular.module('test', []);
app.factory('sharedContent', function ($rootScope) {
    var standardContent;
    var resizeProportion;
    return {
        setStandardContent: function (newStandardContent) {
            standardContent = newStandardContent;
            $rootScope.$broadcast('updateContent');
            console.log('broadcast');
        },
        getStandardContent: function () {
            return standardContent;
        },
        setResizeProportion: function (newResizeProportion) {
            $rootScope.$broadcast('updateResizeProportion');
        },
    }
});
app.run(function (sharedContent) {
    sharedContent.setStandardContent('haha');
});

function testCtrl($scope, sharedContent) {
    $scope.testContent;
    $scope.$on('updateContent', function () {
        console.log('receive');
        $scope.testContent = sharedContent.getStandardContent();
    });
}

function testCtrl2($scope, sharedContent) {
    $scope.testContent2 = 'test';
    $scope.updateContent = function () {
        sharedContent.setStandardContent($scope.testContent2);
    };
}

fiddle 示例:http://jsfiddle.net/jiaming/NsVPe/

当输入变化时,量程将显示该值,这是由于ng-change功能引起的。

但是,在初始化阶段,值“haha​​”没有传播到$ scope.testContent,因此,第一次运行时未显示任何内容。有没有办法使值“haha​​”在第一次运行时出现?

谢谢你。

最佳答案

只需使用$timeout函数提供一点延迟即可。只需在工厂中更新代码即可开始工作。

请引用下面的工厂代码:

app.factory('sharedContent', function ($rootScope,$timeout) {
    var standardContent;
    var resizeProportion;
    return {
        setStandardContent: function (newStandardContent) {
            standardContent = newStandardContent;
            $timeout(function(){
              $rootScope.$broadcast('updateContent');
            },0)
             console.log('broadcast');
        },
        getStandardContent: function () {
            return standardContent;
        },
        setResizeProportion: function (newResizeProportion) {
            $rootScope.$broadcast('updateResizeProportion');
        },
    }
});

关于angularJS $ broadcast和$ on,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16934089/

10-11 13:59