角AJAX服务
我想这可以共享/自动同步数据,以2个或更多个控制器像本实施例中的一个服务:角AJAX服务
app.js(来自实施例)
var myApp = angular.module('myApp', []);
myApp.factory('Data', function(){
return { FirstName: '' };
});
myApp.controller('FirstCtrl', function($scope, Data){
$scope.Data = Data;
});
myApp.controller('SecondCtrl', function($scope, Data){
$scope.Data = Data;
});
此外我需要用ajax加载数据。我尝试了一下,但对于Ajax我需要承诺(所以控制器不会得到改变后的数据),而不是与共享对象,如小提琴链接工作。如果可能的话,我想要一个没有事件的解决方案(rootscope broadcast)。
我该如何将两种技术结合使用?你们知道我的意思吗? :)
改变你的服务是这样的:
myApp.factory('Data', function(){
this.name= { FirstName: '' };
return this;
});
控制器:
myApp.controller('FirstCtrl', function($scope, Data){
$scope.Data = Data.name;
});
myApp.controller('SecondCtrl', function($scope, Data){
$scope.Data = Data.name;
});
我是新的角度,我怎样才能将异步承诺添加到该结构中?如果我返回这个'我'不能回复这个承诺。 (但我需要承诺将数据导入视图) – Chris
请花点时间和探索,看看这个链接,它有你想要的一切:https://docs.angularjs.org/api/ng/service/$q和试着去了解 –
我尝试了很多,现在我的代码是:
angular.module("test").factory("TestFactory", ["$http", function TestFactory($http) {
var factory = {
data: [],
test: 123,
getData: function() {
$http.get("/blub.json").success(function (result) {
factory.data = [1,2,3];
});
},
addToData: function (newData) {
factory.data.push(newData);
}
};
factory.getData();
return factory;
}]);
angular.module("test").controller("TestControllerA", ["$scope", "TestFactory", function ($scope, TestFactory) {
$scope.factory = TestFactory;
}]);
angular.module("test").controller("TestControllerB", ["$scope", "TestFactory", function ($scope, TestFactory) {
$scope.factory = TestFactory;
setInterval(function() {
TestFactory.addToData(TestFactory.data.length + 1);
$scope.$apply(); //refresh view/html
}, 1000);
}]);
我有一个“坏“的一部分,可以表演者或什么?
您可以在工厂创建一个返回承诺的方法。然后在两个控制器中使用'Data.asyncMethod(param1,param2).then(..)'。 –
我的控制器的代码是这样的: 'Data.getBlub(),然后(功能(响应){ \t $ scope.data =响应; });' 但是,如果其他的控制器改变数据,所述第一。一个不会收回新的数据。 – Chris