Jquery 如何在指令的控制器内使用$scope变量生成过滤器

Jquery 如何在指令的控制器内使用$scope变量生成过滤器,jquery,angularjs,angularjs-directive,angularjs-scope,Jquery,Angularjs,Angularjs Directive,Angularjs Scope,我发现了很多用angular JS编写代码的约定。我使用以下约定 app.directive("employeeList" , function(){ return { restrict : 'E' , templateUrl: 'employee-list.html', controller:function($scope , $filter) { $scope.emp_positions = p

我发现了很多用angular JS编写代码的约定。我使用以下约定

app.directive("employeeList" , function(){
    return {
        restrict : 'E' , 
        templateUrl: 'employee-list.html',
        controller:function($scope , $filter)
        {
            $scope.emp_positions = positions_json; // my FIREST array
            $scope.emp_users_json = users_json; // My SECOND Array
          //My Code Logic // 

         // I WANT TO MAKE FILTER HERE WHICH CAN USE $SCOPE VARIABLE. 
         IS THERE ANY WAY TO MAKE FILTER HERE LIKE
            $SCOPE.FILTER('FLITER_NAME' , FUNCTION($SCOPE)){....} ???
          IS IT POSSIBLE? IF NOT WHAT COULD BE OTHER POSSIBLE WAY.
     //

         },
      controllerAs: 'emp'  
      };
 });
现在我想写一个自定义过滤器来过滤我的数据,它现在在“$scope”变量中。 1) 我可以在使用$scope变量的控制器中编写自定义过滤器吗。如果是,请给我举个例子。 如果没有,那么我还能做些什么来将$scope变量传递给指令之外的自定义变量呢


我已经添加了我的plunker,请阅读表“POSITION HERE”,并阅读我的script.js文件。对于数据,我添加了data.js文件

更新:

关于在筛选器中使用$scope

1) 您可以将范围变量作为函数参数从指令传递到过滤器,并从
args
对象访问它们:

 app.directive("employeeList" , function(){
        return {
            restrict : 'E' , 
            templateUrl: 'employee-list.html',
            controller:function($scope)
            {
               $scope.emp_positions = positions_json;
               $scope.emp_users_json = users_json;

               //your another code here
            },
            controllerAs: 'emp'  
          };
    });
您的
employee list.html

<div ng-repeat="employee in employees | employeeFilter: [emp_positions, emp_users_json]">
 .....
</div>
2) 您可以通过传递
this
将整个$scope传递给过滤器

将参考当前范围

<div ng-repeat="employee in employees | employeeFilter: this">
     .....
</div>
但我建议选择第一个选项,只传递范围变量,而不是整个$scope

我已经更新了你的装备


请参阅:。

更新:

关于在筛选器中使用$scope

1) 您可以将范围变量作为函数参数从指令传递到过滤器,并从
args
对象访问它们:

 app.directive("employeeList" , function(){
        return {
            restrict : 'E' , 
            templateUrl: 'employee-list.html',
            controller:function($scope)
            {
               $scope.emp_positions = positions_json;
               $scope.emp_users_json = users_json;

               //your another code here
            },
            controllerAs: 'emp'  
          };
    });
您的
employee list.html

<div ng-repeat="employee in employees | employeeFilter: [emp_positions, emp_users_json]">
 .....
</div>
2) 您可以通过传递
this
将整个$scope传递给过滤器

将参考当前范围

<div ng-repeat="employee in employees | employeeFilter: this">
     .....
</div>
但我建议选择第一个选项,只传递范围变量,而不是整个$scope

我已经更新了你的装备

请参阅:

我可以在使用$scope变量的控制器中编写自定义过滤器吗

是的,您可以通过在用户列表中写入
.filter()

JS

员工列表中的HTML

将其放入函数
foo()
,并启动一些观察程序,在任何更改时调用
foo()

在本例中为HTML:

我可以在使用$scope变量的控制器中编写自定义过滤器吗

是的,您可以通过在用户列表中写入
.filter()

JS

员工列表中的HTML

将其放入函数
foo()
,并启动一些观察程序,在任何更改时调用
foo()


在本例中,HTML:

如何在该文件中使用$scope变量filter@ShivekParmar,您可以在来自args对象的筛选器中使用$scope.variables。请参阅我的更新。但我必须在范围变量中使用不同的数组。我想在第一个文件中显示查找记录,在第二个文件中显示相同的记录,并使用不同的键。但根据您的解决方案,如果我使用app.filter()删除该指令,那么它将无法访问完整的$scope varible。因为它在控制器的外面。作为记录,我也不喜欢你的第二种解决方案。我试图使用{{employee in employees | employeeFilter:(empid)}但由于包含empid的其他数组只能由作用域访问。我更新了我的问题以获得更多澄清。@ShivekParmar,你能用你的示例创建JSFIDLE或PLUNK吗?因为我不太清楚你想要什么。如何在这个数组中使用$scope变量filter@ShivekParmar,您可以在args o的筛选器中使用$scope.variables对象。请参阅我的更新。但是我必须在我的范围变量中使用不同的数组。我希望在第一个数组中显示find记录,并在第二个数组中使用不同的键显示相同的记录。但是,如果我使用app.filter()如果退出该指令,那么它将无法访问完整的$scope varible。因为它位于控制器的外侧。并且作为记录,我也不喜欢您的第二种解决方案。我尝试使用{{employee in employeeFilter:(empid)“}},但因为包含empid的其他数组只能由scope访问。我已经更新了我的问题以获得更多的澄清。@ShivekParmar,您能用您的示例创建JSFIDLE或PLUNK吗?因为我不太清楚你想要什么。
 <tr ng-repeat="empdata in getUsers()">
$scope.filteredUserList = angular.copy($scope.emp_users_json.users)
 .filter(function(item)
    {            
       var itemDoesMatch = true;

       // write logic here to filter your stuff

        return itemDoesMatch;
    });