Автообновление .filter () область

0

Как обновить следующий фильтр, есть какой-то способ?

.controller('MainCtrl', ["$rootScope", "$scope", function($rootScope, $scope) {

  $rootScope.number = 1;
  $scope.text = "foo|baz|bar"

}]).filter("MyFormat", ["$rootScope", function($rootScope){
  return function(str){
      return str.split("|")[$rootScope.number]
  }
}])
<button ng-click="$root.number = 0">0</button><!--foo-->
<button ng-click="$root.number = 1">1</button><!--baz-->
<button ng-click="$root.number = 2">2</button><!--bar-->
<pre>{{text | MyFormat}}</pre>

Вот мой пример Плункера.

Теги:
angularjs-scope

2 ответа

2

Фильтры всегда получают входное значение сначала, но вы можете передать другие аргументы, разделенные : в фильтре. В этом случае я передал ему номер переменной области видимости.

Вам не нужен $ rootScope, вы можете просто использовать область контроллера. Кроме того, когда вы ссылаетесь на переменную области видимости в своем html, вы просто используете имя, а не часть $ scope. Таким образом, очищенная версия выглядит так:

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

//Assuming that you do want to use the $rootScope for one reason or another,
//you still access it in the HTML as if it were a scope variable with just
//the name (because it is just a scope variable, it just one inherited from
//the root).

  .controller('MainCtrl', ["$rootScope", "$scope",
    function($rootScope, $scope) {

      $rootScope.number = 1;
      $scope.text = "foo|baz|bar"

    }
  ])
  .filter("MyFormat", function() {
    return function(str, num) {
      return str.split("|")[num];
    };
  });
<script src="/angular.min.js"></script>

<div ng-app="MyApp">
  <div ng-controller="MainCtrl">
    <button ng-click="number = 0">0</button>
    <!--foo-->
    <button ng-click="number = 1">1</button>
    <!--baz-->
    <button ng-click="number = 2">2</button>
    <!--bar-->
    <pre>{{text | MyFormat : number}}</pre>
  </div>
</div>
  • 0
    Хороший вопрос, нет пути без передачи параметров? Потому что я делаю небольшой фильтр для обновления языков. Я использую что-то вроде этого: config.phrase_website_title | Lang
  • 0
    Да, это не работает.
Показать ещё 2 комментария
0

EDIT: обновленная ссылка

Помогает ли это решить вашу проблему?

Я обновил фильтр, чтобы принять параметр.

  <body ng-controller="MainCtrl">
    <pre>{{text | MyFormat:number}}</pre>
  </body>
  • 0
    Вы не понимаете мой вопрос. В текущем коде нет ошибок, но мне нравится знать, как обновить функцию фильтра при изменении number переменной.
  • 0
    Попался, можешь попробовать обновленную ссылку? Я думаю, что нет способа сделать фильтр зависимым от числа через rootScope, но мы можем передать число в фильтр через параметр.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню