この方法でdate
値をカスタムフィルターに渡します。
angular.module('myapp').
filter('filterReceiptsForDate', function () {
return function (input, date) {
var out = _.filter(input, function (item) {
return moment(item.value.created).format('YYYY-MM-DD') == date;
});
return out;
}
});
ディレクティブでできることのように、いくつかのスコープ変数もそこに注入したいと思います。これらの変数を関数の引数として明示的に渡すことなくこれを行うことは可能ですか?
どうやらできる。
通常は、スコープ変数を関数パラメーターとしてフィルターに渡します。
function MyCtrl($scope){
$scope.currentDate = new Date();
$scope.dateFormat = 'short';
}
<span ng-controller="MyCtrl">{{currentDate | date:dateFormat}}</span> // --> 7/11/13 4:57 PM
ただし、現在のスコープを渡すには、this
を渡す必要があります。
<span ng-controller="MyCtrl">{{currentDate | date:this}}</span>
this
は現在のスコープへの参照になります。
簡略化:
app.controller('AppController',
function($scope) {
$scope.var1 = 'This is some text.';
$scope.var2 = 'And this is appended with custom filter.';
}
);
app.filter('filterReceiptsForDate', function () {
return function (input, scope) {
return input + ' <strong>' + scope.var2 + '</strong>';
};
});
<div ng-bind-html-unsafe="var1 | filterReceiptsForDate:this"></div>
<!-- Results in: "This is some text. <strong>And this is appended with custom filter.</strong>" -->
this
がローカル$scope
を参照していることがわかりました。これが安全なアクセス方法であるかどうかはわかりません。