ディレクティブ関数属性の引数を取得し、別のコントローラーangularjsで変更します

パリドクト

私はツリーを持っていて、directiveユーザーが何かをクリックしたときに何かが起こることを望んでいます。それは、このツリーを使用したい人と一緒に実装する必要があります。たとえば、ノードのテキストが変更されます。

index.html

<div ng-controller='TestController'>
        <tree model="treedata" on-node-clicked="changeNodeText($node)"></tree>
</div>

指令

function treeDirectiveFactory() {
            return {
                restrict: 'E',
                scope: {
                    model: '=model',
                    collapseIcon: '=',//IIconProvider//TODO:
                    expandIcon: '=',//IIconProvider//TODO:
                    onNodeClicked:'&',//param:$node//TODO:
                    isExpanded:'@'
                },        
                templateUrl: '/_Core/DirectiveCore/Tree/TreeTemplate.html',
                controller: 'TreeController',
                controllerAs: 'c'

            }
};

テンプレートの一部

<a href={{node.link()}} class="node-link" ng-click="c.onNodeClicked(node)"
   ng-class="{'margin-no-child':node['__$extension'].isLeaf(node)}">
    <span ng-bind-html="node.iconProvider().htmlPath()"></span>
    {{node.text()}}
</a>

ユーザーがノードをクリックすると、ng-click = "c.onNodeClicked(node)"が呼び出され、クリックされたノードがonNodeClicked関数に渡されます。以下は、controller as cツリーのこの関数の実装です。directive

onNodeClicked(node: Core.INode) {//TODO:

        if (this.scope["onNodeClicked"]) {
            this.scope["onNodeClicked"] = ({$node:node});
        }
    }

$ nodeという名前の引数があり、$ nodeの値を設定していることを関数に伝えたいと思います次にindex.htmlの外部コントローラーTestControllerの$ nodeテキストを変更したい...これはTestContollerのchangeNodeText関数です

f($node: Core.TestNode) {
        if($node !== undefined)
            $node.t = "Clicked!";
    } 

しかし、何も変更されません。実際には、changeNodeText関数は呼び出されません。私は何かが間違っていることを知っていますが、残念ながら私はそれを理解することができません。どんな助けでもいただければ幸いです。

georgeawg

@ Parud0khtへの回答

関数を設定する代わりに、それを呼び出します。

onNodeClicked(node: Core.INode) {//TODO:

        if (this.scope["onNodeClicked"]) {
            //Do THIS
            this.scope["onNodeClicked"]({$node:node});
            //Not THIS
            //this.scope["onNodeClicked"] = ({$node:node});
        }
    }

他の読者への回答

この例ではコンポーネントを使用していますが、同じ原則がディレクティブにも当てはまります。

angular.module('app.dashboard')
    .component('dashboardComponent', {
        templateUrl: 'app/dashboard/directives/dashboard-container.html',
        controller: DashboardComponent,
        controllerAs: 'DashboardCtrl',
        bindings: {
            onTileChange: "&"
        }
    })t

コンポーネントから親コントローラーにイベントデータを通信するには:

でインスタンス化dashboard-componentします:

<dashboard-component on-tile-change="HomeCtrl.onTileChange($tile)">
</dashboard-component>

コンポーネントコントローラーで、ローカルを使用して関数を呼び出します。

this.onTileChange({$tile: tile});

注入されたローカルの規則は$、親スコープの変数と区別するためにプレフィックスを付けて名前を付けることです。

ドキュメントから:

  • &または&attr-親スコープのコンテキストで式を実行する方法を提供します。属性名が指定されていない場合、属性名はローカル名と同じであると見なされます。考える<my-component my-attr="count = count + value">と分離株スコープ定義scope: { localFn:'&myAttr' }、分離株スコーププロパティは、localFn機能のラッパーを指しますcount = count + value表現。多くの場合、分離されたスコープから式を介して親スコープにデータを渡すことが望ましいです。これは、ローカル変数の名前と値のマップを式ラッパーfnに渡すことで実行できます。たとえば、式がincrement($amount)thenの場合、をlocalFnとして呼び出すことで金額の値を指定できますlocalFn({$amount: 22})

- AngularJS総合指令APIリファレンス

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

非ディレクティブコントローラ関数内の属性値にアクセスします

分類Dev

Angular-子ディレクティブのコントローラーで親ディレクティブのコントローラーを取得します(リンク関数ではありません)

分類Dev

角度ディレクティブからコントローラー関数に複数の引数を渡します

分類Dev

ディレクティブでは、関数の引数をhtmlテンプレートに渡します

分類Dev

子ディレクティブで親ディレクティブのコントローラースコープ変数にアクセスします

分類Dev

AngularJSコントローラー-ディレクティブ->ディレクティブからのコントローラー関数の呼び出し

分類Dev

要素の .html() 内のコントローラー関数に引数を渡す角度ディレクティブ

分類Dev

別のコントローラーを使用してビュー内でディレクティブ関数を使用してng-clickを使用する

分類Dev

JS-AngularJS-コントローラーからディレクティブのデータを取得します

分類Dev

ディレクティブAngularJSからコントローラースコープ値を変更します

分類Dev

リンク関数がAngularJSディレクティブで実行される前に、コントローラーでデータを待機します

分類Dev

リンカ関数のスコープはangularjsディレクティブで何を表しますか

分類Dev

AngularJS:ディレクティブのリンク関数をコントローラーに変換する必要がありますか?

分類Dev

コントローラ変数の変更時にディレクティブによって作成された要素を更新します

分類Dev

同じディレクティブのリンク関数内でディレクティブコントローラーの関数を使用する

分類Dev

親から子へのAngularJS呼び出しディレクティブコントローラー関数

分類Dev

ディレクティブテンプレート内の$ scope変数にアクセスし、コントローラー$ scope.variableを更新します

分類Dev

AngularJSのさまざまなコントローラーでディレクティブを使用しますか?

分類Dev

Angularjsのカスタムディレクティブのコントローラーのng-init関数呼び出しからテンプレートを取得する必要があります

分類Dev

AngularJSディレクティブから親コントローラーの関数に値を渡す方法

分類Dev

変数をディレクティブのコントローラーに渡すAngularjs

分類Dev

なぜangularjsディレクティブはスコープを継承しますが、スコープ変数を変更しないのですか?

分類Dev

コントローラーでangularJsディレクティブからトリガーする関数を取得できません

分類Dev

共有変数を使用して、ディレクティブ内からコントローラーUIの変更を誘導する

分類Dev

分離スコープを使用する場合、ディレクティブからコントローラーの関数を呼び出しますか?

分類Dev

コントローラーから角度ディレクティブに関数を送信します

分類Dev

Angular2の子コンポーネントからディレクティブ属性を変更します

分類Dev

スコープを持つディレクティブからのAngularJS $ watchコントローラー変数

分類Dev

ディレクティブでコントローラースコープ変数を変更しても、コントローラー関数には反映されません

Related 関連記事

  1. 1

    非ディレクティブコントローラ関数内の属性値にアクセスします

  2. 2

    Angular-子ディレクティブのコントローラーで親ディレクティブのコントローラーを取得します(リンク関数ではありません)

  3. 3

    角度ディレクティブからコントローラー関数に複数の引数を渡します

  4. 4

    ディレクティブでは、関数の引数をhtmlテンプレートに渡します

  5. 5

    子ディレクティブで親ディレクティブのコントローラースコープ変数にアクセスします

  6. 6

    AngularJSコントローラー-ディレクティブ->ディレクティブからのコントローラー関数の呼び出し

  7. 7

    要素の .html() 内のコントローラー関数に引数を渡す角度ディレクティブ

  8. 8

    別のコントローラーを使用してビュー内でディレクティブ関数を使用してng-clickを使用する

  9. 9

    JS-AngularJS-コントローラーからディレクティブのデータを取得します

  10. 10

    ディレクティブAngularJSからコントローラースコープ値を変更します

  11. 11

    リンク関数がAngularJSディレクティブで実行される前に、コントローラーでデータを待機します

  12. 12

    リンカ関数のスコープはangularjsディレクティブで何を表しますか

  13. 13

    AngularJS:ディレクティブのリンク関数をコントローラーに変換する必要がありますか?

  14. 14

    コントローラ変数の変更時にディレクティブによって作成された要素を更新します

  15. 15

    同じディレクティブのリンク関数内でディレクティブコントローラーの関数を使用する

  16. 16

    親から子へのAngularJS呼び出しディレクティブコントローラー関数

  17. 17

    ディレクティブテンプレート内の$ scope変数にアクセスし、コントローラー$ scope.variableを更新します

  18. 18

    AngularJSのさまざまなコントローラーでディレクティブを使用しますか?

  19. 19

    Angularjsのカスタムディレクティブのコントローラーのng-init関数呼び出しからテンプレートを取得する必要があります

  20. 20

    AngularJSディレクティブから親コントローラーの関数に値を渡す方法

  21. 21

    変数をディレクティブのコントローラーに渡すAngularjs

  22. 22

    なぜangularjsディレクティブはスコープを継承しますが、スコープ変数を変更しないのですか?

  23. 23

    コントローラーでangularJsディレクティブからトリガーする関数を取得できません

  24. 24

    共有変数を使用して、ディレクティブ内からコントローラーUIの変更を誘導する

  25. 25

    分離スコープを使用する場合、ディレクティブからコントローラーの関数を呼び出しますか?

  26. 26

    コントローラーから角度ディレクティブに関数を送信します

  27. 27

    Angular2の子コンポーネントからディレクティブ属性を変更します

  28. 28

    スコープを持つディレクティブからのAngularJS $ watchコントローラー変数

  29. 29

    ディレクティブでコントローラースコープ変数を変更しても、コントローラー関数には反映されません

ホットタグ

アーカイブ