2016-09-14 97 views
0

我想这可以共享/自动同步数据,以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; 
}); 

jsFiddle example

此外我需要用ajax加载数据。我尝试了一下,但对于Ajax我需要承诺(所以控制器不会得到改变后的数据),而不是与共享对象,如小提琴链接工作。如果可能的话,我想要一个没有事件的解决方案(rootscope broadcast)

我该如何将两种技术结合使用?你们知道我的意思吗? :)

+0

您可以在工厂创建一个返回承诺的方法。然后在两个控制器中使用'Data.asyncMethod(param1,param2).then(..)'。 –

+0

我的控制器的代码是这样的: 'Data.getBlub(),然后(功能(响应){ \t $ scope.data =响应; });' 但是,如果其他的控制器改变数据,所述第一。一个不会收回新的数据。 – Chris

回答

1

改变你的服务是这样的:

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; 
}); 
+0

我是新的角度,我怎样才能将异步承诺添加到该结构中?如果我返回这个'我'不能回复这个承诺。 (但我需要承诺将数据导入视图) – Chris

+0

请花点时间和探索,看看这个链接,它有你想要的一切:https://docs.angularjs.org/api/ng/service/$q和试着去了解 –

0

我尝试了很多,现在我的代码是:

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); 
}]); 

我有一个“坏“的一部分,可以表演者或什么?