2015-01-15 90 views
0

我想呈現文本,如果它是名稱或值。如果它是創建或enventId,我不想循環。我正在嘗試使用Filter和ng-if條件。它不工作。angularjs ng-repeat with Filter或ng-if條件

HTML代碼

<tr ng-repeat="event in events | filter:Name "> 
    <td >{{event.Name}} : </td> 
    <td>{{ event.Value }}</td> 
    </tr> 

JS代碼

Events: [ 
    { 
     CreatedTime: "/Date(1420757322810-0800)/", 
     EventId: 13, 
     Name: "AdGroupId", 
     Value: "2367898" 
    }, 

    { 
     CreatedTime: "/Date(1420757322810-0800)/", 
     EventId: 13, 
     Name: "AdGroupId", 
     Value: "2367898" 
    } 
] 

我希望得到的結果應該是

AdGroupId:2367898

+0

所以你想壓制沒有name屬性的事件,對吧? – hgoebl 2015-01-15 18:16:44

+0

這沒有意義。只需刪除你的過濾器,並簡單地循環「事件中的事件」,然後你可以選擇只在你的html中呈現Name和Value,如你現在所做的那樣 – floribon 2015-01-15 18:20:48

+0

爲什麼?我有100多場比賽。如果它不是名稱/值,我不想重複循環。我想補充條件。 – user3194721 2015-01-15 18:23:27

回答

0

假設你正在嘗試要問的是如何排除項目既沒有名稱也沒有值,你需要一個自定義函數。這應該足夠了:

$scope.filterEvents = function(e){ 
    return e.Name || e.Value; 
}; 

然後:

<tr ng-repeat="event in events | filter:filterEvents"> 
    <td >{{event.Name}} : </td> 
    <td>{{ event.Value }}</td> 
</tr> 

Example


另外,如果你的意思是你要過濾根據指定的名稱和/或值的值,你可以這樣做:

$scope.filterEvents = function (e) { 
    return ($scope.Name || $scope.Value) && 
      (!$scope.Name || $scope.Name === e.Name) && 
      (!$scope.Value || $scope.Value === e.Value); 
}; 

(HTML與上面相同)

Example

0

假設你正在尋找一個過濾器來刪除其中沒有Name和Value屬性的事件。

這是給你一個例子:

控制器:

$scope.filterNameValue = function(e){ 
    if(angular.isDefined(e.Name) && angular.isDefined(e.Value)) 
     return e; 
    }; 

的Html

<table> 
    <tbody> 
    <tr ng-repeat="event in events | filter: filterNameValue"> 
     <td >{{event.Name}} : </td> 
     <td>{{ event.Value }}</td> 
    </tr> 
    </tbody> 
</table> 

Working Sample here