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
你可以使用事件或者双向绑定(这是我最喜欢的)
我有以下情况,我用的是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
你可以使用事件或者双向绑定(这是我最喜欢的)