2017-09-17 8 views
2

AngularJS htmlのtamplatesに直接ES6矢印関数を使用する可能性はありますか?AngularJS HTMLテンプレートのES6矢印関数を使用

<div ng-if="results.filter(e => e.ext == 'xml').length > 0">Text</div> 

'結果'はプロパティとして 'ext'を持つオブジェクトのリストです。 今まで私がlodashを使用しましたし、それが完璧に動作します:

<div ng-if="_.filter(results, { ext : 'xml' }).length > 0">Text</div> 

が、可能であればES6に変更されます...

は、またはいくつかのヒントまたは多分より良いアイデアを誰の経験を持っていますか?

+2

あなたはそれを行うことができます、角度は 'ng-if'指令でjs式を評価しますが、そうしてはいけません。 ES6をサポートしないブラウザには多くのバージョンが存在するためです。 – alexmac

+1

@alexmacこれはAngularJSであり、AngularJSの式には制限があります。 [AngularJS Developer Guide - AngularJS Expressions vs. JavaScript Expressions](https://docs.angularjs.org/guide/expression#angularjs-expressions-vs-javascript-expressions)を参照してください。 – georgeawg

答えて

1

は、AngularJS Expressionと評価され、関数の宣言は認められません。ドキュメントから

:JavaScriptの表現対

AngularJS式式は次のような違いを持つJavaScript式のようなものです

AngularJS:

  • ない関数宣言:あなたが宣言することはできませんng-initディレクティブ内でさえ、AngularJS式で機能します。あなたは、より複雑なJavaScriptコードを実行したい場合は

、あなたはそれのコントローラメソッド作り、あなたのビューからメソッドを呼び出す必要があります。 eval()に自分でAngularJS式を使用する場合は、$eval() methodを使用してください。

— AngularJS Developer Guide - Expressions

+0

AngularJS式のeval()の呼び出しを明確にするために、Expression内でeval()を呼び出すだけで、それ自体が有効な式であるものを評価することができます。例えば。 ng-ifから$ eval(expr)を呼び出すことができますが、exprはコントローラーで定義された有効なAngular式だけです。 '3 * 10 |通貨' –

0

georgeawgが言ったようにいいえ、あなたは(例えば 'NG-場合は' 内)で、すべての式の内部関数を宣言することはできません。これは、部分的にはAngularがビジネスロジックをコントローラに配置して懸念の正確な分離を促すように設計されているためです。

角度式は、オブジェクトやスコープ上の値のプロパティ、基本的な書式設定、並べ替え、フィルタリングなど、かなり基本的なものに限定されています。ビジネスロジック定義はすべてコントローラに属します。

関連する問題