AngularJS 工厂中的 $scope

AngularJS $scope in factory

我有以下情况,我用的是jQuery预加载插件。

angular.module('app')
    .factory('Preloader', function Preloader(Videos) {


        return {
            start: function() {

                $.html5Loader({
                    filesToLoad: Videos.query(),
                    onBeforeLoad: function() {},
                    onComplete: function() {
                      //$scope.loaded = done
                    },
                    onElementLoaded: function(obj, elm) {},
                    onUpdate: function(percentage) {
                      //$scope.precentage = precentage
                    }
                });

            }
        }

    });

我建立了一个包装插件的工厂。

在我的控制器中,我有类似的东西:

angular.module('playlist')
    .controller('Ctrl', function($scope, Preloader, Videos) {

        Preloader.start();        

并且在 HTML 我有一个加载屏幕,我想用 ng-if="!loaded" 隐藏它。

有人可以向我解释如何将 $scope.loaded 从工厂 link 转移到控制器内部的 $scope.loaded 吗?

在这种情况下指令是正确的方法,而不是工厂。 这样,您可以使用指令 $scope.

公开 loaded 变量

如果您仍然想使用工厂,请将 loaded 变量公开为工厂的成员,这样您就可以观察控制器中的变化。

编辑

调用start你可以使用事件或者双向绑定(这是我最喜欢的)