121

私はJavaScriptのフルスタックアプリケーション全体に不慣れで、Angularにまったく慣れていないので、誰かが私のためにここに記録を残してくれることを望んでいました.

AngularJS を使用してクライアント側アプリを作成するときに、Jade や Handlebars などのテンプレート フレームワークを使用する必要があるのはなぜですか。

私は、これらのテンプレート フレームワークも使用したことがありません。そのため、私は利点に完全に精通していません。しかし、たとえばハンドルバーを見ると、ループなど、Angular で行うのと同じ多くのことを行います。

私が知る限り、適切な HTML を使用して Angular でテンプレートを作成し、クライアント側ですべてのテンプレートを作成し、これを node と mongo などを使用した API ファーストのアプローチと組み合わせることが最も理にかなっています。

この混乱の理由は、私が GitHub で見つけた多くの例が Jade を利用していて、私には直感に反するように思えるからです。

私を啓発し、私を正してください。私よりも多くのことを知っている人から、いくつかのベスト プラクティスを学びたいと思っています。

ありがとう

4

10 に答える 10

14
  1. AngularJS には独自のテンプレート エンジンがあるため、ハンドルバーを使用する必要はありません。
  2. 彼らが Jade を使用する理由は、それが html にコンパイルされ、後でフロントエンドで angularJS によって提供される単なるサーバー レンダラーだからです。

したがって、TL;DR、サーバーでは、どの言語[jade、haml、...]を使用して、アプリケーションのhtml構造のみを生成できます.angularJSはレンダリングしてHTMLで動作するため、angularJSとは関係ありませんフロントエンドのランタイム。

サーバーで Jade を使用する必要はありません。新しい開発者を混乱させるため、使用しないことをお勧めします。あなたが目にするプロジェクトでは、Jade はよりクリーンで慣れているという理由だけで使用されます。angularJS で使用する場合は、ロジックなしでプレーンな html を生成するだけです。

于 2013-08-11T18:22:09.430 に答える
7

上記のすべての回答を読みましたが、AngularJS テンプレートの生成よりも jade の使用を非常に便利なものにする 1 つの側面について誰も言及していないことに少し驚きました。

すでに述べたように、生の html と jade のタイピングの現実的なシナリオの違いは実際には注目に値しますが、忘れてはならないより重要なことは、angularjs テンプレートを動的に変更して再初期化する必要がある場合があるということです。

簡単に言うと、innerHTML を介して html を変更し、AngularJS に強制的にコンテンツを再コンパイルさせる必要がある場合があります。そして、これは、ジェイドを介してそのようなビューを生成する場合に、まさにそのタイプのタスクに利益をもたらす可能性があります。

また、AngularJS はモデルとうまく連携しますが、その構造は定義上よく知られています。実際には、実際には正確な構造がわからないことがあります (たとえば、JSON レンダラーを想像してください)。AngularJS はここでは (Angular アプリを構築している場合でも) 非常に不器用ですが、jade は仕事をします。

于 2014-02-07T11:28:01.317 に答える
2

Jade は Haml と言うよりも html に近いことは間違いありません。したがって、コンテキストの切り替えは実際には非常に最小限です。それでも、完全になくなったわけではありません。開発者にとってはまったく問題にならないかもしれません。しかし、デザイナーが来て、ネストされたタグを適切に機能させる方法を尋ねると、最初に作成した不必要な問題を解決していることになります。

HTML は非常に読みやすく書くことができ、パーシャルを使用してより理解しやすくすることができます。ジェイドであろうと HTML であろうと、500 行は読みにくいものです。

翡翠のテンプレートはこちら

.product-container

    .input-group.msB.col-md-5.no-padding
        .fnt-light-navyblue.mtB(for='name')
            strong Name the sticker
        input.full-input(type='text', placeholder='Awesome Batman Sticker')
    .clear

    .form-group.mmT
        label.form-label.fnt-light-navyblue
            strong Choose size
        .selector-group(ng-repeat="size in sizes", ng-class="{ 'msT': !$first}")
            - raw
            span.radio
                input.radio(name='choose_sticker_size',
                            ng-model="selectedSize",
                            type='radio',
                            value='{{size}}',
                            id="sticker-{{size}}")
                span.fake-radio
            label(for='sticker-{{size}}') {{size}} inch
            - endraw
    // end form-group
    .clear

そして同等のHTML

<div class="product-container">

    <div class="input-group msB col-md-5 no-padding">
        <div for="name" class="fnt-light-navyblue mtB">
            <strong>Name the product</strong>
        </div>
        <input type="text" placeholder="Awesome Batman Sticker" class="full-input" />
    </div>
    <div class="clear"></div>

    <div class="form-group mmT">
        <label class="form-label fnt-light-navyblue">
            <strong>Choose size</strong>
        </label>
        <div
            class="selector-group"
            ng-class="{ 'msT': !$first}"
            ng-repeat="size in sizes">
                {% raw %}
                <span class="radio">
                    <input
                        id="sticker-{{size}}"
                        class="radio"
                        name="choose_sticker_size"
                        ng-model="selectedSize"
                        type="radio"
                        value="{{ size }}" />
                    <span class="fake-radio"></span>
                </span>
                <label for="sticker-{{size}}">{{size}}</label>
                {% endraw %}
        </div>
    </div><!-- end form-group -->
    <div class="clear"></div>
</div>

読みやすく書かれていれば、切り替えを正当化するほど HTML が特に不利になるとは思えません。案の定、角括弧は目障りです。しかし、私が導入したインダイレクションが html を壊しているのではないかというデザイナーの疑問に対処しなければならないよりは、むしろそれらを持っていたいと思います。(そうではないかもしれません。しかし、それを証明することは価値のある努力ではありません)

于 2015-03-15T13:57:09.563 に答える
2

Jade を介して角度テンプレートを含めることができます。

script(type="text/ng-template", id="admin")
  include partials/admin

テンプレートのキャッシングについては、JavaScript ファイルにエスケープされたテンプレートを含めるよりもはるかに脆弱ではないと認識しています。

参照: https://docs.angularjs.org/api/ng/service/$templateCache

于 2014-05-19T04:06:26.150 に答える
0

チームで作業する場合、フロントエンドはページを静的 html として設計することを好む可能性があります。その静的 html を動的テンプレートに変換するとエラーが発生し、jade を追加するとそのような変換手順が追加されます。

他の多くの人と同じように、私はシンプルさを好みます!

于 2016-10-14T11:07:00.327 に答える