2016-04-05 7 views
0

フィールドの値を表示名に変換するには、ビュー内の式を1行として使用しています。なぜAngular viewの配列式が機能しないのですか?

<td>{{ {'M': "Male", 'F': "Femail"} [partB.gender] }}</td> 

、それがうまく働いた:例えば、バックエンドはこのために、私のようにビューを書かれている、男性と女性のための「F」のための「M」として性別を送信します。

私は公正な番号choice fieldsを私のdjangoモデルに持っています。これはに動作していない

<td> 
{{ ["No", "Yes"][+partB.is_employee_with_substantial_interest] }} 
</td> 

しかし:そのうちの一つは、ブールはtrue/falseとして受け取ったととしてビューで「はい」/「いいえ」私が書いた表現としてそのフィールドを表示することです。

.と単項式+の間に優先順位の問題があると考えましたが、そうではありません。チェック:

>> var a = {a: true, b: false} 
undefined 
>> a.a 
true 
>> +a.a 
1 

私の知る限り表現["No", "Yes"][+partB.is_employee_with_substantial_interest]自体は間違っていないJavaScriptを知っています。

ここで質問をする前に、私はplunker

<html ng-app="myApp" > 
 
<head> 
 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.js"></script> 
 
    <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script> 
 
    <script src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.10.0.js"></script> 
 
</head> 
 
<body ng-controller="myCtrl"> 
 

 
    <h1>AngularJS Template Query </h1> 
 

 
    <h4> JavaScript Working </h4> 
 
    <ul> 
 
    <li id="a"> Grijesh Chauhan </li> 
 
    <li id="b"> Grijesh Chauhan </li> 
 
    <li id="c"> Grijesh Chauhan </li> 
 
    <li id="d"> Grijesh Chauhan </li> 
 
    <li id="e"> Grijesh Chauhan </li> 
 
    </ul> 
 

 
    <div> 
 

 
    <h4> Angular Code not Working </h4> 
 
    
 
    <ul> 
 
<li> {{ ["No", "Yes"][+data.b] }} </li> 
 
<li> {{ ["No", "Yes"][+data.a] }} </li> 
 
<li> {{ { true: "Yes", false: "No"}[data.b] }} </li> 
 
<li> {{ { true: "Yes", false: "No"}[data.a] }} </li> 
 
<li> {{ { 1: "Yes", 0: "No"}[+data.b] }} </li> 
 
<li> {{ { 1: "Yes", 0: "No"}[+data.a] }} </li> 
 
    </ul> 
 
    
 
    </div> 
 
    
 
    <script> 
 
var data = {a: true, b: false}; 
 
    
 
document.getElementById('a').innerHTML = ["No", "Yes"][+data.a]; 
 
document.getElementById('b').innerHTML = ["No", "Yes"][+data.b]; 
 
document.getElementById('c').innerHTML = { 1: "Yes", 0: "No"}[+data.b]; 
 
document.getElementById('d').innerHTML = { 1: "Yes", 0: "No"}[+data.a]; 
 
document.getElementById('e').innerHTML = { true: "Yes", false: "No"}[data.a]; 
 
    </script> 
 
    <script> 
 
var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope) { 
 
    $scope.data = { a: true, b: false }; 
 
}); 
 
    </script> 
 

 
</body> 
 

 
</html>

答えて

1

角度を持っているが、独自の評価関数であるに自分自身をそれを把握しようとしました。彼はシーンの背後にあるeval()を実行していません。そのため、Javascriptで動作するもののいくつかは角度表現では機能しません。いくつかのことがまたはbまたはcが定義されていない場合は、インスタンスのためのJavaScriptでクラッシュ

a.b.c.d == true 

が、これは

のための必要性を全く動作しません角度表現で、JSにクラッシュするという角度で動作oppsiteで

あなたの問題のために

a && a.b && a.b.c && a.b.c.d 

あなたはこのような

<li> {{ { "true": "Yes", "false": "No"}["\""+data.a+"\""] }} </li> 

か何かをしようとしています文字列のブール値を変換しようとします。

その他の回避策は、より一般的な

<li ng-if="data.a">Yes</li> 
<li ng-if="!data.a">No</li> 

これは、IMO最終的には、より詳細なが、より読みやすいです。

+0

ご協力いただきありがとうございます。私は 'ng-if'を使って表現を変更します –

関連する問題