2015-01-01 27 views
7

我需要使用其他的,如果在angularjs模板。什麼是語法? 例如,在CI會寫類似下面的代碼:否則,如果在角js模板

if (data.sender=='system') 
{data.receiver} 
else if (data.sender=='mail') 
{data.receiver} 
else {data.sender} 

我的代碼:

{{data.sender == 'System' ? data.receiver : ' '}} 

{{data.sender =='mail' ? data.receiver : data.sender }} 
+1

它可能是更清晰,使之成爲計算性能。 –

+0

我不在尋找,如果其他,但「其他如果」! – query

+0

btw你的第二個片段與第一個相反...... – finishingmove

回答

12
{{(data.sender === 'system' || data.sender === 'mail') ? data.receiver : data.sender}} 
+0

你可能應該考慮製作一個過濾器而不是嵌套的三元運算符。 –

+0

是的,這答案只有到OP的情況下,但不是一般的 – elaijuh

+0

謝謝我正在邏輯複雜! – query

1

這是的,但你應該儘量避免的模板內這種複雜的邏輯,根據經驗。

{{ data.sender == 'system' ? data.receiver : data.sender == 'mail' ? data.receiver : data.sender }} 
1

如果需要一個ELSEIF在角模板可以使用三元運算符,如C/C++

{{ data.sender=='system' 
< 4 ? data.receiver : data.sender=='mail' ? data.receiver : data.sender}} 

angular.module('quetion_app', []); 
 

 
angular.module('quetion_app').controller('quertion_controller', ['$scope', 
 
    function($scope) { 
 

 
    $scope.data = { 
 
     sender: 'some sender', 
 
     receiver: 'somebody' 
 
    }; 
 

 
    } 
 
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="quetion_app"> 
 

 
    <div ng-controller="quertion_controller"> 
 
    {{data}} 
 
    <br> 
 
    <br> 
 
    {{ data.sender=='system' 
 
    < 4 ? data.receiver : data.sender=='mail' ? data.receiver : data.sender}} </div> 
 

 
    </div>

變化data.sender在代碼段檢查行爲

希望它可以幫助

7

沒有的if-else在角模板語法,你正在尋找。模板中的邏輯太多使得難以維護。這裏有兩個可能的解決方案:

<span ng-show="data.sender == 'mail' || data.sender=='system'">{{data.receiver}}</span> 
<span ng-show="data.sender != 'mail' && data.sender!='system'">{{data.sender}}</span> 

您還可以使用納克開關以類似的方式:

<span ng-switch="data.sender"> 
    <span ng-switch-when="mail">{{data.receiver}}</span> 
    <span ng-switch-when="system">{{data.receiver}}</span> 
    <span ng-switch-default>{{data.sender}}</span> 
</span> 

後來有,只有跨越的一個將文檔,其中n中存在的優勢-show/ng-hide使用display:none隱藏文檔中存在的所有跨度。

其他選項將寫你自己的指令,或創建特殊的過濾器。

0

這種類型的邏輯真的屬於控制器或服務,它負責在$ scope中設置數據。將它置於視圖中會給視圖帶來很多不必要的邏輯,並且還會導致該邏輯作爲既昂貴又不必要的手錶來運行。

在此建立數據的代碼,你可以有:

data.displayedSender = (data.sender === 'system' || data.sender === 'mail') ? data.receiver : data.sender; 

然後在您的視圖綁定到data.displayed發件人:

<span>{{data.displayedSender}}</span>