2016-12-05 61 views
0

我與角和node.js的相當新,我有將對象傳遞到角(這是routes.js)的路線:傳遞對象從角到濾波器

var index = function(req, res) { 
    var idCompanyAndUser = req.user; 
    res.render('index', { 
     idCompanyAndUser: idCompanyAndUser 
    }); 
}; 

然後,在index.js ,我有:

<%= idCompanyAndUser.company_shortname %> //this works correctly 

<tr ng-repeat="user in users | filterByCompany /*this is what I want to do*/ :idCompanyAndUser"> 

和app.js我:

app.controller('RemoteStreamsController', ['session', '$location', '$http', '$scope', '$rootScope', '$window', '$interval', function (session, $location, $http, $scope, $rootScope, $window, $interval) { 
     //stuff here 
     }]); 

    app.filter('filterStreamsByCompanyLogged', function() { 

     return function(items /*I want to pass it here*/ , idCompanyAndUser) { 
    //other stuff here 
} 
    }; 

但是,這是行不通的。我怎樣才能將這個對象傳遞給過濾器?

回答

0

你可以發送多個參數到你的filter.Here是在模板中的用法。

{{ variable | myFilter:arg1:arg2... }} 

或過濾器,你需要通過這些ARGS像ARGS可以是一個對象或數組或瞭解更多詳情任何其他參數

angular.module('MyModule').controller('MyCtrl',function($scope, $filter){ 
    $filter('MyFilter')(arg1, arg2, ...); 
}) 

請參閱本教程enter link description here

+0

感謝,但過濾器的作品,問題是,這種方式傳遞參數不。我需要的只是訪問'app.js'中的'idCompanyAnduser'。這可能嗎?如果我試圖通過它 '' 它說idCompanyAndUser未定義。 – Diego

0

你可以使用簡單的{{x in xx filter:name}}來過濾json數據,並且名稱應該通過控制器中的json數據來實現,或者如果您想使用過濾器作爲方法app.filter,那麼請注意:

app.filter('Filtername',$ obj){ ------------做你的過濾器代碼 return $ obj; }

並使用它作爲{{X爲xx濾波器:FILTERNAME}}

0

一種替代的想法是使用JSON參數化。因爲內置的OrderBy Angular過濾器只能獲取字符串列表 - 但是如果我們創建自定義過濾器並將參數序列化爲JSON字符串,我們可以在過濾器中解析這些參數並應用它們。我們甚至可以用這種方式以編程方式應用內置過濾器。


下面是一個JSFiddle示例,其中包含一個簡短用戶列表。您可以排序和反向排序姓或名或年齡的列:

https://jsfiddle.net/zt1h6q1s/2/

filterApp JS

// the main (app) module 
var filterApp = angular.module("filterApp", []); 

angular.module("filterApp") 
    .controller("UsersController", 
    function UsersController($scope) { 

     $scope.sort_by = { 
      'column': 'last_name', 'reverse': false 
     }; 

     $scope.SortBy = angular.toJson($scope.sort_by); 

     $scope.changeSort = function(sortColumn) { 
     if (sortColumn) { 
      // New Column or old and reverse? 
      if ($scope.sort_by.column === sortColumn) { 
      $scope.sort_by.reverse = !$scope.sort_by.reverse; 
      } else { 
      $scope.sort_by.column = sortColumn; 
      $scope.sort_by.reverse = false; 
      } 

      $scope.SortBy = angular.toJson($scope.sort_by); 
     } 
     } 

     $scope.users = [ 
     { 
      "first_name": "LtCmdr", 
      "last_name": "Data", 
      "age": 33 
     }, 
     { 
      "first_name": "Miles", 
      "last_name": "Obrien", 
      "age": 13 
     }, 
     { 
      "first_name": "Captain", 
      "last_name": "Picard", 
      "age": 29 
     } 
     ]; 

    }); 


    angular.module("filterApp") 
    .filter("usersFilter", function($filter) { 
     return function(usersList, paramsJsonStr) { 

     // PARSE the Json String 
     var params = angular.fromJson(paramsJsonStr); 
       // var column = params.column; 
     // var reverse = params.reverse; 

     // Programatically apply the built-in "OrderBy" 
     // filter as before, using the parsed parameters 
     return $filter('orderBy')(usersList, params.column, params.reverse); 

     } 
    }); 

表HTML頁面

<div class="container-fluid" ng-app="filterApp" ng-controller="UsersController"> 

    <p> 
    Sort By &nbsp; = &nbsp; {{sort_by}} 
    </p> 

    <hr> 

    <table class="users-list"> 
    <thead> 
     <th ng-click="changeSort('first_name')"> 
     First Name &nbsp;&nbsp; 
     </th> 
     <th ng-click="changeSort('last_name')"> 
     Last Name &nbsp;&nbsp; 
     </th> 
     <th ng-click="changeSort('age')"> 
      Age &nbsp;&nbsp; 
     </th> 
    </thead> 
    <tbody> 
     <!-- <tr ng-repeat="u in users | orderBy:sort_by.column:sort_by.reverse"> --> 
     <tr ng-repeat="u in users | usersFilter:SortBy"> 
     <td>{{ u.first_name }}</td> 
     <td>{{ u.last_name }}</td> 
     <td>{{ u.age }}</td> 
     </tr> 
    </tbody> 
    </table> 
</div> 

這是一個黑客一輪,但它的作品,如果你真的想使用一個過濾對象河希望有所幫助!