Как обновить следующий фильтр, есть какой-то способ?
.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>
Вот мой пример Плункера.
Фильтры всегда получают входное значение сначала, но вы можете передать другие аргументы, разделенные :
в фильтре. В этом случае я передал ему номер переменной области видимости.
Вам не нужен $ 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>
EDIT: обновленная ссылка
Помогает ли это решить вашу проблему?
Я обновил фильтр, чтобы принять параметр.
<body ng-controller="MainCtrl">
<pre>{{text | MyFormat:number}}</pre>
</body>
number
переменной.
config.phrase_website_title | Lang