1

(私の英語でごめんなさい:)

次のようなAngularUIui-select2ディレクティブを使用して、フォームでSelect2使用しています。

<input ng-model="city" type="text" ui-select2="setupCitySelect" />

ここで、setupCitySelect-select2オプションを持つオブジェクト。私は彼を適切な範囲に設定しています

$scope.setupCitySelect = {
    allowClear: true,
    minimumInputLength: 2

    ...etc, about 50 SLOC
}

すべて正常に動作します。しかし、たとえば、ページ(またはページの一部)に5つのselect2要素(CitySelect、UserSelect、ConditionSelectなど)がある場合、大量のコードを取得しますが、それらのほとんどは同じです。AngularUIは「グローバルデフォルト」を提供します。したがって、繰り返しコードを(ディレクティブで)移動できます。

var dirs = angular.module('vipc.directives', ['ui']);

// defaults setting for UI
dirs.value('ui.config', {
    select2: {
        allowClear: true,
        minimumInputLength: 2,
        formatInputTooShort: function(term, minLenght) {
            var rest = minLenght - term.length;
            return "minimum: "+rest;
        },
...etc.

しかし、まだコントローラーでいくつかの作業が必要です。ajax-urlなどの一意のプロパティを設定するためです...そして、それはいくつかのページ、いくつかのコントローラーで提供されています。ああ...はい、これを1つのファイル(common.jsなど)に入れることができます。しかし、私は思う-それは最善の方法ではない。アングラスは言う:「指令を使う、ルーク!」しかし、どのように?複雑すぎるドキュメント。ドキュメントを読みました。3回。成功せずに。私はいくつかの簡単なdirを書きましたが、これは...上記の検索形式とモーダル形式で「分離された」スコープ(ページの2 CitySelectにすることができます)が必要でした。コンパイル機能?リンク機能?

必要なのはただ

<myapp-city-select id="city"></myapp-city-select>
<myapp-user-select></myapp-city-select>
...later, same html file
<myapp-city-select id="city2"></myapp-city-select>

誰かが助けることができますか?

4

1 に答える 1

0

コントローラにあるはずです。これがプランカーです。すべてのディレクティブが同じデータを共有していることを示しています。

したがって、コントローラに共通のオプションを持つディレクティブを作成し、それに特定のオプションを渡すことができます。

もう1つのオプションは、一般的なオプションを定義し、必要な場所にサービスを注入するサービスを用意することです。

于 2012-11-10T05:22:03.517 に答える