【问题标题】:Which method exchange data between controllers better [closed]哪种方法更好地在控制器之间交换数据[关闭]
【发布时间】:2014-08-21 07:10:18
【问题描述】:

在控制器之间发送数据使用服务。但有什么更好的呢? 在控制器使用$on,在服务使用$broadcast; 或者只是 javascript 对象? (Exp:

myapp.factory('MyService', function(){
    var obj = {};

    return{
        setObject: function(value){
            obj.value = value;
        },

        getObject: function(){
            return obj;
        }
    };
});

【问题讨论】:

  • 你的实际用例是什么?
  • @Sprotenwels 我有搜索控制器,可以按 3 个实例搜索。该控制器具有选择搜索实例的“搜索”按钮和选项卡。另一个 - Instance1Controller 可能会为搜索列表生成视图。所以我可以在控制器之间交换数据。
  • @Sprotenwels 和全球问题:在什么情况下使用每种方法?))

标签: javascript angularjs frontend


【解决方案1】:

您可以使用相同的服务在两个控制器之间交换数据 示例:

myapp.controller('myController', ['$scope','MyService'
function ( $scope,myService) {
   var obj={};
   obj=myService.setObject();
   $scope.obj=obj;
}]);

myapp.controller('myController2', ['$scope','MyService'
function ( $scope,myService) {
   var obj2={};
   obj2=myService.setObject();
   $scope.obj2=obj2;
}]);

 myapp.factory('MyService', function(){
    var obj = {};

    _setObject = function (value) {
      obj.value = value;
      return obj;
    }

    _getObject = function () {
        return obj;
    }

    return {
        setObject : _setObject ,
        getObject :_getObject 
    }
});

控制器包含服务对象的引用,当一个控制器更改对象时,另一个控制器对象会自动更改,因为它们共享该服务对象的相同引用

【讨论】:

  • 我知道,但我问什么方法更好
  • 这样更好,因为 $broadcast 和 $on 会启动事件冒泡并创建更多 $watches ,这会减慢性能并且不易管理。其次,角度还说尽可能使用最低 $on 和广播以获取更多 stackoverflow.com/questions/11252780/…
猜你喜欢
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多