2014-10-30 63 views
3

我有一个controller与各种$scopes。我需要访问这些$范围中的一个自定义过滤器:

app.controller('AppController', 
    function($scope) { 
     $scope.var1 = 'Some data1'; 
     $scope.var2 = 'Some data2'; 
    } 
); 

app.filter('myCustomFilter', function ($filter) { 

    return function (date) { 
    var date = date; 
    }; 
}); 


<tr ng-repeat="data in MyData" ng-class="{true: 'green', false:'red'}[data.Date | myCustomFilter]"> 

</tr> 

如何传递scope.var1 $到我myCustomFilter

+1

我讨厌成为nitpicker,但是你的控制器中有1 $ scope和各种变量,而不是各种$ scopes。 – wvdz 2014-10-30 10:39:20

+0

@popovitsj - 感谢指出,这只是一个例子。 – 2014-10-30 10:40:40

+0

[AngularJS中的过滤器访问范围变量]可能的副本(http://stackoverflow.com/questions/17596246/access-scope-variables-from-a-filter-in-angularjs) – Icarus 2017-03-30 09:49:29

回答

4

您必须向过滤器提供所需的范围属性。

你可以那样做:

筛选:

app.filter('myCustomFilter', function ($filter) { 

    return function (date,myVar1) { 
/* Do some stuff with myVar1 */ 
    }; 
}); 

HTML:

<tr ng-repeat="data in MyData" ng-class="{true: 'green', false:'red'}[data.Date | myCustomFilter:var1]"> 

</tr> 
+0

谢谢! – 2014-10-30 10:49:35

5
app.filter('myCustomFilter', function ($filter) { 
    return function (date, scope) { // add scope here 
    var date = date; 
    }; 
}); 

ng-class="{true: 'green', false:'red'}[data.Date | myCustomFilter:this]"> 
+0

试过,未定义返回。 – 2014-10-30 10:41:01

+0

你必须通过**'myCustomFilter:this' **这样的范围,如果你只需要传递一个你可以像'myCustomFilter:var1'这样的函数。请检查 – 2014-10-30 10:50:57

1

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

 

 
app.controller('AppController', 
 
    function($scope) { 
 
    $scope.var1 = 2; 
 
    $scope.var2 = 3; 
 

 
    $scope.MyData = [{ 
 
     Date: 1 
 
    }, { 
 
     Date: 2 
 
    }, { 
 
     Date: 3 
 
    }] 
 

 
    } 
 
); 
 

 
app.filter('myCustomFilter', function($filter) { 
 

 
    return function(date, scopeValue) { 
 
    var date = date; 
 
    return date * scopeValue 
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<body> 
 
    <div ng-app="app"> 
 
    <div ng-controller="AppController"> 
 

 
     <li ng-repeat="data in MyData"> 
 
    Date: {{data.Date}} | Date after myCustomFilter: {{data.Date | myCustomFilter : var1}} 
 
     </li> 
 
    </div> 
 
    </div> 
 

 

 
</body>

相关问题