2014-09-01 81 views
1

我對angularjs相當新穎,所以我不確定我想要做的是正確的方法。基本上我想在我的頁面中顯示一個嵌套的對象和一個過濾器,這樣用戶可以很容易地在輸入上鍵入關鍵字並且內容被過濾,只顯示過濾器發現的記錄對嵌套對象使用angularjs過濾器

但是我請注意,過濾器會獲取整個父對象,而且我期望只顯示記錄,因此使用以下代碼,如果我搜索日本,它將顯示悉尼,墨爾本和洛杉磯。

的Javascript

<script type="text/javascript"> 
    var demoApp = angular.module('demoApp',['ngSanitize']); 
    demoApp.controller('simpleC',['$scope', function ($scope){ 
     $scope.info = [ 
     {name: 'Documents',links: [ 
       {linkname:'title1',linknamesublink:[ 
         {namesublink:'document 1', description: 'Sydney'}, 
         {namesublink:'document 2', description: 'Tokyo <b>Japan</b>'} 
         ]}, 
       {linkname:'title2',linknamesublink:[ 
         {namesublink:'document 3', description: 'Melbourne'}, 
         {namesublink:'document 4', description: 'Los Angeles'} 
         ]} 
       ]}, 
     {name: 'Video',links: [ 
       {linkname:'title1',linknamesublink:[ 
         {namesublink:'video 1', description: 'California'}, 
         {namesublink:'video 2', description: 'San Francisco <b> USA</b>'} 
         ]}, 
       {linkname:'title2',linknamesublink:[ 
         {namesublink:'video 3', description: 'South America'}, 
         {namesublink:'video 4', description: 'Northern <b>Europe</b>'} 
         ]}, 
       {linkname:'title3',linknamesublink:[ 
         {namesublink:'video name 5', description: 'Africa'}, 
         {namesublink:'video name 6', description: 'Bangkok <b>Thailand</b>'} 
         ]} 
       ]}, 
     ]; 
    }]); 
</script> 

HTML:

<div class="container" ng-app="demoApp"> 
    <br /><input type="text" class="form-control" ng-model="search" >   
    <div ng-controller="simpleC"> 
     <div ng-repeat="i in info | filter:search" > 
      {{i.name}} : 
      <div ng-repeat="link in i.links"> 
       {{link.linkname}} 
        <div ng-repeat="sublink in link.linknamesublink"> 
          {{sublink.namesublink}}: <!--{{sublink.description}}--> 
          <span ng-bind-html="sublink.description"></span> 
        </div> 
      </div> 
     </div>  
    </div> 
</div> 
+0

您是否想要實現類似自動完成的功能?你可以考慮使用這個鏈接中解釋的typehahaed指令:http://angular-ui.github.io/bootstrap/ – 2014-09-01 11:52:41

+0

對於那個投了這個問題的人(如果再回來閱讀它),你能否提供投下的原因,如果是複製問題或太簡單的問題,請提供解決方案。 – Manza 2014-09-03 06:28:51

回答

0

寫自己的過濾功能。這樣,您可以完全控制返回的內容。 https://docs.angularjs.org/api/ng/filter/filter

module.filter('searchfilter', function() { 
    return function(searchexpr) { 
    var filteredList = ['my', 'filtered', 'result'];//implement yourself 
    return filteredList; 
    }; 
}); 

,並使用searchfilter代替filter在您的標記。

或者,嘗試使用如下所述的過濾器函數:http://fdietz.github.io/recipes-with-angular-js/common-user-interface-patterns/filtering-and-sorting-a-list.html(據我所知,您沒有定義搜索函數,即過濾器表達式的第一個存儲庫)。

+0

我不確定我是否理解這些示例,因爲它們似乎是硬編碼他們想要過濾的內容? – Manza 2014-09-02 11:13:36

+0

事實上,這個例子硬編碼的返回值(小評論給出了一個提示:-))。你必須推出你自己的過濾器功能(即循環你的列表並過濾出所需的項目)。這不是太難,並且與角本身無關。 – orange 2014-09-02 20:10:13

+0

根據我的第二個建議(「或,...」),您可以定義一個篩選函數來決定是否接受該值(在您的示例中,搜索參數*不是函數)不適用於您的數據結構。 – orange 2014-09-02 20:15:32

0

修改:

如果你想基於任意字段篩選的對象(說 「名」),可以使用以下格式

<div ng-repeat="i in info" ng-if="search==i.name"> 
+0

嗨,以及我很難說,過濾器將成爲html上的第二行: Manza 2014-09-02 10:44:59

+0

Hi @ user668027,基於哪個字段您要篩選結果的對象「信息」 – Pavi 2014-09-02 14:27:45

+0

我已更新答案。如果您需要根據其他字段進行過濾,請更新。我將盡力幫助 – Pavi 2014-09-02 14:34:41

2

按照這個例子

http://www.whatibroke.com/?p=857

您可以在ng-repeat中使用過濾器按屬性過濾項目或自己編寫過濾器。

作者想要通過searc_postcode的值過濾郵編屬性。所以,他寫了//過濾{postcode:search_postcode} //

Ps。對不起,我誤解了你的問題。

+0

嗨感謝您的回覆,我嘗試過,但它不起作用,不知道是否因爲我正在搜索嵌套對象? – Manza 2014-09-02 11:10:06

+1

@ user668027是的,它不適用於嵌套屬性。也許你應該自己創建一個自定義過濾器。 https://docs.angularjs.org/tutorial/step_09 – 2014-09-03 12:34:00