0

文字列としてAngularの親スコープにイベントの名前(クリックまたはタッチ)を設定したい。子スコープでは、その文字列を使用してイベントを element.on にバインドしたいと考えています。

例:

angular.module('directives', [])
    .directive('Sidebar', function () {
        'use strict';

        return {
            link: function (scope) {
                //determines whether or not to use click or touch events
                //I want to use this to bind events with 
                //element.on(scope.sidebarClickEvent) in child scopes          
                scope.sidebarClickEvent = 'click';
            },
            restrict: 'E',
            templateUrl: 'sidebar.html'
        };
    })
    .directive('collapseBtn', function() {
        'use strict';

        return function (scope, element) {
            element.on(scope.sidebarClickEvent /* undefined */ , function () {
                //scope.sidebarClickEvent is available here, when the event handler executes
                scope.toggleSidebarCollapseState();
                element.find('i').toggleClass('icon-double-angle-right');
            });

        };
    })

問題は、イベントをバインドすると親スコープで定義されたプロパティを使用できないため、イベントをバインドすると scope.sidebarClickEvent が定義されないことです。しかし、それを通常のクリック イベントに変更すると、イベント ハンドラーでプロパティを取得できます。

イベント バインディングが発生したときに、スコープによって継承されたプロパティにアクセスできますか? ここでスコープの継承を適切に理解しているかどうかさえわからないので、理解の誤りを指摘していただければ幸いです。

ありがとう。

4

0 に答える 0