我试图在应用启动时加载JSON,并在我的所有控制器之间传播数据。 我知道这不是很难做到,但我对所读的所有文章/答案感到困惑,因为他们使用的语法不同于我,有人可以指导我如何做到这一点吗?
我目前正在让控制器制作$ http.get:
myApp = angular.module("myApp", [])
myApp.controller "HomeCtrl", ($scope, $http, $routeParams) ->
$http.get('gethome.php').success (data) ->
$scope.home = data
但是我必须在每个我想要访问该数据的控制器中重复自己
答案 0 :(得分:5)
我建议您使用Memoization模式和服务,并重用控制器中的服务
请检查以下示例代码
var app = angular.module('plunker', []);
app.service('cache', function ($http,$q) {
var mycache={};
return {
getdata: function (key) {
var deferred = $q.defer();
if (mycache[key]) {
deferred.resolve(mycache[key]);
}
else {
$http.get('TextFile.txt').then(function (data) {
mycache[key] = data.data;
deferred.resolve(mycache[key]);
});
}
return deferred.promise;
}
}
});
app.controller('test', function ($scope, cache) {
cache.getdata('cache').then(function (data) {
$scope.data = data;
});
});
app.controller('test1', function ($scope, cache) {
//since data is already cached now it will server the cached data
cache.getdata('cache').then(function (data) {
$scope.data = data;
});
});
答案 1 :(得分:1)
您可以通过以下方式访问$scope
angular.element(document.getElementById('YourCtrl')).scope();
之后,您可以在所有控制器中初始化data
。