Tampal kod dahulu:
pengawal:
.controller('FoldController', ['$scope', function ($scope){
$scope.isFolded = true; // 標(biāo)志是否折疊的狀態(tài)
}])
arahan:
.directive('fold', function () {
return {
restrict: 'A',
link: function (scope, element, attrs) {
// 只要點(diǎn)擊其中的內(nèi)容,讓其折疊回去
element.on('click',function () {
scope.isFolded = true;
element.slideUp();
console.log(scope);
});
// 折疊的函數(shù)
function toggleFold(isFold) {
isFold ? element.slideUp() : element.slideDown();
}
// 監(jiān)視是否折疊,即controller里定義的標(biāo)志
scope.$watch(attrs.fold, function (isFold) {
toggleFold(isFold);
});
}
}
})
html:
<nav class="navbar navbar-default" ng-controller="FoldController">
<p class="container">
<p class="navbar-header">
<button type="button" class="navbar-toggle"
ng-click="isFolded=!isFolded">
// 主要是這里 點(diǎn)擊后toggle折疊的標(biāo)志
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="#/index" class="navbar-brand">Index {{isFolded}}</a>
// 為了方便測試,我將折疊表示顯示出來
</p>
// 這里用directive控制
<p class="navbar-collapse collapse" fold="isFolded">
<ul class="navbar-nav nav">
<li class="active"><a href="#/index">index</a></li>
<li><a href="#/about">about</a></li>
<li><a href="#/contact">contact</a></li>
<li><a href="#/chatroom">chatroom</a></li>
</ul>
</p>
</p>
</nav>
Kesan:
Apabila dilipat
Apabila dibuka
Serahan awal selesai, jangkaan saya ialah:
Apabila ia dibentangkan, klik pada kawasan yang dilipat untuk melipatnya semula dan tukar skop.isFold bendera lipat untuk memulihkannya kepada keadaan asalnya,
Soalannya ialah:
Akan ada pepijat, iaitu, saya mengubah suai nilai skop.isFold dan mengesahkan bahawa nilai skop telah ditukar, tetapi nilai asal masih pada halaman, iaitu pengikatan dua hala tidak sah . Lihat gambar di bawah
Dari paparan dalam gambar, kawasan lipatan telah dilipat Output skop.isFold di bawah juga benar, tetapi nilai di bahagian atas halaman adalah palsu . Saya telah mengesahkan pengawal itu betul dengan nilai skop.isFold dalam arahan Hanya halaman ini berlaku secara tidak menentu, yang agak menyedihkan. . .
小伙看你根骨奇佳,潛力無限,來學(xué)PHP伐。
<p class="navbar-collapse collapse" fold ng-model="isFolded">
<ul class="navbar-nav nav">
<li class="active"><a href="#/index">index</a></li>
<li><a href="#/about">about</a></li>
<li><a href="#/contact">contact</a></li>
<li><a href="#/chatroom">chatroom</a></li>
</ul>
</p>
js
.directive('fold', function () {
return {
require: 'ngModel',
restrict: 'A',
link: function (scope, element, attrs) {
// 只要點(diǎn)擊其中的內(nèi)容,讓其折疊回去
element.on('click',function () {
scope.isFolded = true;
element.slideUp();
scope.$digest();
console.log(scope);
});
.....
scope.$watch('isFolded', function (isFold) {
toggleFold(isFold);
});
Penyelesaiannya ialah:
element.on('click', function() {
pe.isFolded = !scope.isFolded;
element.slideUp();
scope.$apply();
})
Malah, ramai yang salah faham, iaitu masih menggunakan pemantauan acara elemnet.on dalam fungsi pautan,
Mengapa tidak menggunakan ngClick dan menulis fungsi scope.click dalam pautan?
Melainkan anda menggunakan pemalam jQuery pihak ketiga