これは、ディレクティブがexampleApp
モジュールによって作成されたルート スコープの子であるためです。、、およびモジュールはservices
、子からルート スコープまでのツリーのプロトタイプの継承を提供するために注入されます。将来のある時点で、によって作成されたルートスコープがモジュールを除外する場合に備えて、フィルターがディレクティブにアクセスできることに依存するのは危険です。controllers
directives
exampleApp
toDate
linkBox
exampleApp
services
Erstad Stephen が回答で書いたことは部分的に正しいですが、 $injector ではフィルター名にFilter
. $filterProvider docsで詳しく説明されています。
次のコードが機能します。
//CORE MODULE
angular.module('exampleApp',['controllers','directives']);
angular.module('controllers',[]).controller('app_ctrl',['$scope',function($scope){
$scope.dateVal = 20131010;
}]);
angular.module('services',[]).filter('toDate',[function(){
function func(ymd){
ymd = ymd + "";
var y = ymd.substring(0,4);
var m = ymd.substring(4,6);
var d = ymd.substring(6);
return (+m) + "/" + (+d) + "/" + y;
}
return func;
}]);
//DIRECTIVE
angular.module('directives',['services']).directive('linkBox', ['toDateFilter', function(toDate){
var dir = {
transclude:false,
scope:{isolateVar:'@linkBox'},
replace:true,
template:'<p>Filtered value: {{isolateVar | toDate}}</p>',
link: function lfn(scope, instance, attr){
var a = angular.element(instance);
a.text(scope.isolateVar.name);
console.log(scope);
} //end link function
}; //end dir object
return dir;
}]);
これが実際の JSBin です: http://jsbin.com/ICUjuri/2/edit