在控制器之间共享数据,离子+角度js

时间:2016-07-10 03:50:07

标签: angularjs ionic-framework

这些是我的控制者:

.controller('recommendedJobsCtrl', function($q,$scope, $ionicSideMenuDelegate,$window,$http,dataShare) {
    $scope.text='hey world';
    $scope.post=function(){
      dataShare.sendData($scope.text);
       console.log('sent: ' + $scope.text);
    }   
 })
.controller('jobsCtrl', function($scope,dataShare) {
   $scope.words=dataShare.getData();
})

这是我的工厂:

.factory('dataShare',function($rootScope){
  var service = {};

    service.sendData = function(data){
      service=data;
      $rootScope.$broadcast('data_shared', service);
     },

    service.getData = function(){
      console.log('this.data is ' + service)
      return service;

    };
  return service;
});

当console.log打印时,服务为空。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

工厂代码编写不正确,您也应该使用角度服务而不是创建工厂,因为您只需要在控制器之间共享数据。虽然两者都是单身对象。

让我们先用工厂做

.factory('dataShare',function(){
  var service = {
     sendData: sendData,
     getData: getData
  };

  var serviceData;

  function sendData(data){
      serviceData = data;
  }

  function getData(){
      console.log('this.data is ' + serviceData);
      return serviceData;
  }

  return service;
});

让我们用服务

.service('dataShare',function(){
  var serviceData;

  this.sendData = function(data){
      serviceData = data;
  }

  this.getData = function(){
      console.log('this.data is ' + serviceData);
      return serviceData;
  }
});

答案 1 :(得分:0)

要接收您需要的数据:

$rootScope.$on('data_shared', function(evt, data) {
});

它是异步操作,因此您无法同步调用它。如果要抽象通信,则需要实现自己的观察者/订阅者模式。