, " Angular".
, $offer .
, ( ):
HTML
<body ng-app="App" ng-controller="TestController">
{{test}}
</body>
JS ( )
var App = angular.module('App', []);
var provide;
App.config(function($provide) {
provide = $provide;
});
App.run(function($timeout) {
$timeout(function() {
provide.value('Test', {a:1});
},1000);
});
App.controller('TestController', function($injector, $scope) {
var unwatch = $scope.$watch(function() {
return $injector.has('Test');
}, function(has) {
if(has) {
$scope.test = $injector.get('Test');
unwatch();
}
});
});
, , async.
.
, , , , , , .
UPDATE
" " , , :
JS
var App = angular.module('App', []);
App.factory('MyLazyFactory', function($timeout) {
return $timeout(function() {
return {a:1};
},1000);
});
App.controller('TestController', function(MyLazyFactory, $scope) {
MyLazyFactory.then(function(myFactory) {
$scope.test = myFactory;
});
});
, .
UPDATE
( $resource , )
, , , jsFiddle.
JS
angular.module('myApp',["ngResource"])
.service("LazyPrefs", [ "$http", function($http) {
return $http.post("/echo/json/", "json={\"prefix\":\"/echo/json/test\"}")
.then(function(response) { return response.data; });
}])
.factory("LazyDoc", [ "$resource", "LazyPrefs", function($resource, LazyPrefs) {
return LazyPrefs.then(function(Prefs) {
console.log("Using " + Prefs.prefix + " as prefix");
return $resource(Prefs.prefix + "/:docId", { docId:"@id" });
});
}])
.controller("MainCtrl", [ "$scope", "$http", "LazyDoc", function($scope, $http, LazyDoc) {
LazyDoc.then(function(Doc) {
$scope.doc = new Doc({ name: "Steve", photo: "profile.jpg" });
});
}]);