2016-04-08 9 views
0

簡単な背景:値が偽になったら何かをしたいので、私はブートストラップドロップダウンメニューのaria-expanded属性を聞くディレクティブを書こうとしています。私が理解していることから、要素内のクラスの変更を監視したい場合、これは "angularJS"の方法です。カスタムディレクティブの属性を見る - AngularJS

aria-expandedクラスはこのimg要素内にあります。私のディレクティブの名前はオーバーレイ・モニターです:

<img ng-init="displayMainMenu()" overlay-monitor id="nav-burger" uib-dropdown-toggle ng-disabled="disabled" ng-click="sMainMenu=true; isSubMenu=resetMenu(); getLinks(); bStopPropagation=true;" src="img/burger.png"> 

私は実際にそれが何をしたいのかARIA-拡大がfalseになった場合、私はページ上の持っている不透明なオーバーレイを閉じることです。しかし、今のところ、私はちょうど私が右のそれをしなかったかどうかを確認するために、アラートをトリガーしようとしている:私はそれをテストしたとき

app.directive('overlayMonitor', function() { 
return { 
    restrict: 'A', 
    scope: { ariaExpanded: '@' }, 
    link: function ($scope, element, attrs) { 
     if (element.attrs('aria-expanded') == "true") { 
      alert('directive'); 
     } 
    } 
} 

}); 

、警告は表示されませんでした。 :(

私が間違って何をしましたか?

お知らせください。ありがとうございます!

PS私は、我々がjQueryのを使用することはできません。おかげで再びあなたの応答を。言及するのを忘れてしまった!


編集:

0: $腕時計について読んだ後、私は次のコードを試してみました

良いニュースは、アラートがポップアップしたことです。悪い知らせは警告だけが「偽」と言います。それは警告を発したことはありません( '真')。 :/

+1

私はアリア展開= "true" を使用して、あなたを見ることができません。 –

+0

私はまた、メニューを閉じるときにあなたが最も大きなサイクルを引き起こしているとは思わない。 –

+0

'aria-expanded'は文字列' 'false ''またはブール '' false'にセットされますか? – georgeawg

答えて

0

あなたはこのように使用することができます:

if (attrs.ariaExpanded) { // instead of element.attrs('..') 
    alert('directive'); 
} 
+0

ありがとうBhojendra!ただし、アラートは最初のページ読み込み後にのみ発生しました。その後もはや解雇されなかった。 aria-expandedがfalseになるたびにアラートがポップアップするようにするにはどうすればよいですか? –

+0

aria-expandedがfalseになるときは? –

+0

'if(!attrs.ariaExpanded){' ??? –

0

linkが一度に実行される機能、レンダリングディレクティブ。

したがって、変数の変更を追跡するには、$watchを使用する必要があります。

は、次の試してみてください。

app.directive('overlayMonitor', function() { 
return { 
    restrict: 'A', 
    scope: { ariaExpanded: '@' }, 
    link: function (scope, element, attrs) { 
    scope.$watch(function(){ return attrs.ariaExpanded; }, 
    function(val){ 
     if (!val) { 
     alert('directive'); 
     } 
    }); 
} 
} 
}); 
+0

ステパンありがとう!私はあなたの解決策を試しましたが、警告はページの読み込み後にのみ発生しました。私はメニューを崩壊するたびに発射しませんでした。 : –

+0

Ok。あなたのコードの例がjsfiddleまたはplunkerにあります。 –

+0

'attrs.ariaExpanded'をどのような値にする必要がありますか。例えば' true'や '' true''です。 –

関連する問題