這篇文章給大家分享的是有關(guān)Angular.JS如何通過(guò)指令操作DOM的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
成都創(chuàng)新互聯(lián)公司專注于長(zhǎng)春企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站制作。長(zhǎng)春網(wǎng)站建設(shè)公司,為長(zhǎng)春等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
在指令而非在控制器中操作DOM
相信大家在頁(yè)面處理中,難免會(huì)遇到操作DOM的情況,在AngularJS中,對(duì)DOM的操作是在指令而非控制器中完成的。
AngularJS強(qiáng)調(diào)隔離的思想:把復(fù)雜的邏輯和操作放在指令或服務(wù)中,控制器作為視圖和$scope之間的橋梁,僅僅用來(lái)存儲(chǔ)數(shù)據(jù)模型。
jqLite
為了便于DOM操作,AngularJS內(nèi)部封裝了angular.element
,如果現(xiàn)有項(xiàng)目中已經(jīng)引入的jQuery,angular.element
相當(dāng)于jQuery函數(shù)的別名,否則,angular.element
代表AngularJS對(duì)jQuery封裝的一個(gè)子集,稱為”jQuery lite”或者jqLite。jqLite不具備jQuery全部方法,詳見(jiàn)AngularJS官方文檔 angular.element。
link-function
link-function可以注冊(cè)DOM監(jiān)聽(tīng)器,同時(shí)更新DOM,更多l(xiāng)ink-function介紹參考這篇文章AngularJS Custom-Directives link-function guide
指令代碼
一個(gè)引入jQuery操作DOM的指令如下:
webApp.directive("detailTopStick", ["$timeout", "$window", function ($timeout, $window) { return { restrict: "A", link: function (scope) { $timeout(function () { var navbar = $(".navbar-nav"); var navbarOffsetTop = navbar.offset().top; var headerInfo = $(".header-info"); var headerInfoMarginBottom = parseInt(headerInfo.css("margin-bottom")); var navbarHeight = parseInt(navbar.css("height")); angular.element($window).bind("resize", function () { // 窗口綁定resize事件 navbar.css("width", headerInfo.width()); navbarOffsetTop = navbar.offset().top; scope.$apply(); }); angular.element($window).bind("scroll", function () { if ($window.scrollY > navbarOffsetTop) { navbar.css("width", headerInfo.width()); navbar.addClass("detail-navbar-fix"); headerInfo.css("margin-bottom", headerInfoMarginBottom + navbarHeight); } else { navbar.removeClass("detail-navbar-fix"); headerInfo.css("margin-bottom", headerInfoMarginBottom); } scope.$apply(); }); navbar.on("click", function () { if ($window.scrollY > navbarOffsetTop) { $window.scrollTo(0, navbarOffsetTop); } }); }); } }; }]);
如果未引入jquery,可以這樣獲取元素:angular.element(document.querySelector(“.class-name”))
感謝各位的閱讀!關(guān)于“Angular.JS如何通過(guò)指令操作DOM”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!