溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Angular.JS如何通過指令操作DOM

發布時間:2021-07-20 11:16:26 來源:億速云 閱讀:142 作者:小新 欄目:web開發

這篇文章給大家分享的是有關Angular.JS如何通過指令操作DOM的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

在指令而非在控制器中操作DOM

相信大家在頁面處理中,難免會遇到操作DOM的情況,在AngularJS中,對DOM的操作是在指令而非控制器中完成的。

AngularJS強調隔離的思想:把復雜的邏輯和操作放在指令或服務中,控制器作為視圖和$scope之間的橋梁,僅僅用來存儲數據模型。

jqLite

為了便于DOM操作,AngularJS內部封裝了angular.element,如果現有項目中已經引入的jQuery,angular.element相當于jQuery函數的別名,否則,angular.element代表AngularJS對jQuery封裝的一個子集,稱為”jQuery lite”或者jqLite。jqLite不具備jQuery全部方法,詳見AngularJS官方文檔 angular.element。

link-function

link-function可以注冊DOM監聽器,同時更新DOM,更多link-function介紹參考這篇文章AngularJS Custom-Directives link-function guide

指令代碼

一個引入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”))

感謝各位的閱讀!關于“Angular.JS如何通過指令操作DOM”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女