サイド ナビゲーション メニューを構築しようとしていますが、DOM の状態 (つまり、DOM 内) に基づいて項目を動的に<section>
設定したいと考えています。
ただし、AJAX ( ) を介して取得されるスコープ変数に基づくng-if
さまざまな に適用されるがいくつかあります。そのため、ディレクティブがコンパイル (またはリンク) されたとき、これらのスコープ変数はまだ取得されておらず、はまだ安定していません (変数が であるかのように評価されます)。<section>
$http.get
ng-if
undefined
メイン HTML
<my-sidenav></my-sidenav>
<!-- Bunch of other content and structure -->
<section id="foo1" class="sidenav-item">...</section>
<section id="foo2" class="sidenav-item">...</section>
<section id="foo3" class="sidenav-item" ng-if="fooVar1 === fooVar2">...</section>
<section id="foo4" class="sidenav-item">...</section>
<section id="foo5" class="sidenav-item" ng-if="fooVar3 !== fooVar4">...</section>
サイドナビ HTML
<div>
<a ng-repeat="section in ctrl.sections track by section" href="#" ng-click="ctrl.scrollTo(section)">{{section}}</a>
</div>
ディレクティブの定義
function mySidenav() {
return {
templateUrl: 'sidenav.html',
controller: function() {
var ctrl = this;
// After template URL is linked up
// !!! ng-if still not stable !!!
ctrl.$postLink = function() {
// Convert nodeList to array for easier manipulation
var nodeList = document.querySelectorAll('.sidenav-item');
var nodeArray = Array.prototype.slice.call(nodeList);
// Extract section id
ctrl.sections = nodeArray.map(function(el) {return el.id;});
};
ctrl.scrollTo = /*...*/
},
controllerAs: 'ctrl'
};
}
式が安定化された後 、ページ上の DOM 要素にアクセスする最良の方法は何ですか? ng-if
私は考え$timeout
ていましたが、「安全な値」が何であるかは本当にわかりません.
または、どういうわけか使用できますか/使用する必要があります$watch
か? ctrl.sections
動的に更新する方法はありますか?