通过两个控制器之间的过滤器共享服务在角度1.3.x中不起作用

时间:2014-12-03 15:08:10

标签: angularjs migration

好的家伙我很确定它在某个地方有记录,但我似乎无法找到它,这就是为什么我提前道歉如果它已经被讨论过了。

我试图通过跨越不同控制器/指令等的过滤器来共享本地化服务。 在角度1.2.x它工作,但在1.3.x它没有。

参见plunkr 取消注释脚本以在1.2.x / 1.3.x之间切换

var app = angular.module('plunker', []);

app.service('trnsService', ['$rootScope',
  function($rootScope) {
    var trnsService = {},
      trns = {
        'CONSTANT': {
          'en': 'En text',
          'bla': 'Bla text'
        }
      },
      lan = 'en';

    trnsService.setLang = function setLang(lang) {
      lan = lang;

      console.log(lan);

      if (!$rootScope.$$phase) {
        $rootScope.$apply();
      }
    };

    trnsService.getTrns = function getTrns(key) {
      return trns[key][lan]
    };
    return trnsService;
  }
])
  .filter('trns', ['trnsService',
    function(trnsService) {
      return function(input) {
        return trnsService.getTrns(input);
      };
    }
  ])
  .controller('MainCtrl', function($scope, trnsService) {
    $scope.setLang = function setLang(lg) {

      trnsService.setLang(lg);
    }
  })
  .controller('SecCtrl', function($scope, trnsService) {
    $scope.setLang = function setLang(lg) {

      trnsService.setLang(lg);
    }
  });

1 个答案:

答案 0 :(得分:0)

找到它。将过滤器设置为$ stateful为我做了。只是希望我早些时候找到它并且没有因为它而失去一整天...

.filter('trns', ['trnsService',
    function(trnsService) {
      // return function(input) {
      //   return trnsService.getTrns(input);
      // };
      function decorateFilter(input) {
        return trnsService.getTrns(input);
      }
      decorateFilter.$stateful = true;
      return decorateFilter;
    }
  ])

plunkr

这里有更多信息:

https://github.com/angular-translate/angular-translate/issues/720

在这里

https://docs.angularjs.org/guide/filter