成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術文章
文章詳情頁

angular.js - Angular雙向綁定失效了!

瀏覽:107日期:2024-10-12 08:28:43

問題描述

先貼上代碼:

controller:

.controller(’FoldController’, [’$scope’, function ($scope){ $scope.isFolded = true; // 標志是否折疊的狀態}])

directive:

.directive(’fold’, function () { return {restrict: ’A’,link: function (scope, element, attrs) { // 只要點擊其中的內容,讓其折疊回去 element.on(’click’,function () { scope.isFolded = true;element.slideUp();console.log(scope); }); // 折疊的函數 function toggleFold(isFold) {isFold ? element.slideUp() : element.slideDown(); } // 監視是否折疊,即controller里定義的標志 scope.$watch(attrs.fold, function (isFold) {toggleFold(isFold); });} }})

html:

<nav ng-controller='FoldController'> <p class='container'><p class='navbar-header'> <button type='button' ng-click='isFolded=!isFolded'> // 主要是這里 點擊后toggle折疊的標志<span class='icon-bar'></span><span class='icon-bar'></span><span class='icon-bar'></span> </button> <a href='http://m.cgvv.com.cn/wenda/14853.html#/index' class='navbar-brand'>Index {{isFolded}}</a> // 為了方便測試,我將折疊表示顯示出來</p> // 這里用directive控制<p fold='isFolded'> <ul class='navbar-nav nav'><li class='active'><a href='http://m.cgvv.com.cn/wenda/14853.html#/index'>index</a></li><li><a href='http://m.cgvv.com.cn/wenda/14853.html#/about'>about</a></li><li><a href='http://m.cgvv.com.cn/wenda/14853.html#/contact'>contact</a></li><li><a href='http://m.cgvv.com.cn/wenda/14853.html#/chatroom'>chatroom</a></li> </ul></p> </p></nav>

效果:

折疊時

angular.js - Angular雙向綁定失效了!

未折疊時

angular.js - Angular雙向綁定失效了!

前提交代完畢,我的期望是:

在未折疊時通過點擊折疊區域,讓其折疊回去,同時改變scope.isFold折疊標志,讓其恢復原狀,

問題是:

其中會有一個bug,就是我修改了scope.isFold的值,并且驗證了scope的值是被改變的,但是頁面上依然是原值,即雙向綁定失效,看下圖

angular.js - Angular雙向綁定失效了!

從圖上的顯示看,折疊區域已經被折疊,下面輸出的scope.isFold也是正常的true,但是頁面頂端上的值卻是false,我驗證過dom元素,是對了,驗證過controller和directive里的scope.isFold的值,是對了,唯獨這個頁面就是對的,這個情況發生的也沒有規律,挺郁悶的,誰來給看看。。。

問題解答

回答1:

在你的事件處理函數中 加入 $scope.$apply

回答2:

<p fold ng-model='isFolded'> <ul class='navbar-nav nav'><li class='active'><a href='http://m.cgvv.com.cn/wenda/14853.html#/index'>index</a></li><li><a href='http://m.cgvv.com.cn/wenda/14853.html#/about'>about</a></li><li><a href='http://m.cgvv.com.cn/wenda/14853.html#/contact'>contact</a></li><li><a href='http://m.cgvv.com.cn/wenda/14853.html#/chatroom'>chatroom</a></li> </ul></p>

js

.directive(’fold’, function () { return {require: ’ngModel’,restrict: ’A’,link: function (scope, element, attrs) { // 只要點擊其中的內容,讓其折疊回去 element.on(’click’,function () { scope.isFolded = true;element.slideUp();scope.$digest();console.log(scope); }); ..... scope.$watch(’isFolded’, function (isFold) {toggleFold(isFold); });回答3:

解決方案是:

在操作完dom元素,修改scope上的屬性值后,scope.$apply更新視圖

element.on(’click’, function() { pe.isFolded = !scope.isFolded; element.slideUp(); scope.$apply();})回答4:

其實很多人有個誤區, 就是還在link函數中使用 elemnet.on 這種事件監聽,為什么不用ngClick然后在link中寫一個scope.click函數呢?

除非你用的第三方的jQuery插件

相關文章:
主站蜘蛛池模板: 精品久久一区二区 | 国产成人精品日本亚洲专一区 | 国产91成人精品亚洲精品 | 国产精品久久久久久久免费 | 国产成人一区二区三中文 | 一区二区在线播放福利视频 | 伊人短视频| 久久香蕉国产精品一区二区三 | 一级片网址 | 国产午夜毛片一区二区三区 | 日本成aⅴ人片日本伦 | 日韩美三级 | 美女黄色毛片免费看 | 国产成人tv在线观看 | 免费看欧美日韩一区二区三区 | 中文字幕一区二区在线视频 | 国产成人综合亚洲欧美在 | 怡红院免费的全部视频国产a | 国产在线精品一区二区 | 国产视频亚洲 | 国产成人综合精品一区 | 午夜三级理论在线观看视频 | 国产精品一一在线观看 | 欧美日韩99 | 99国产精品欧美久久久久久影院 | gv手机在线观看 | 亚洲日韩aⅴ在线视频 | 欧美一级毛片不卡免费观看 | 亚洲 欧美 日韩 在线 中文字幕 | 国内交换一区二区三区 | 国产剧情一区二区 | 美女网站免费观看视频 | 亚洲性在线 | 久久精品国产一区二区三区日韩 | 成人午夜视频免费观看 | 日本免费人成在线网站 | 国产成人精品aaaa视频一区 | 日韩免费一级毛片欧美一级日韩片 | 久久国产精品无码网站 | 美女视频黄a视频免费全程 美女视频黄a视频免费全过程 | 手机毛片|