Angular.JS通過指令操作DOM的方法
在指令而非在控制器中操作DOM
相信大家在頁面處理中,難免會遇到操作DOM的情況,在AngularJS中,對DOM的操作是在指令而非控制器中完成的。
AngularJS強調(diào)隔離的思想:把復(fù)雜的邏輯和操作放在指令或服務(wù)中,控制器作為視圖和$scope之間的橋梁,僅僅用來存儲數(shù)據(jù)模型。
jqLite
為了便于DOM操作,AngularJS內(nèi)部封裝了angular.element,如果現(xiàn)有項目中已經(jīng)引入的jQuery,angular.element相當于jQuery函數(shù)的別名,否則,angular.element代表AngularJS對jQuery封裝的一個子集,稱為”jQuery lite”或者jqLite。jqLite不具備jQuery全部方法,詳見AngularJS官方文檔 angular.element。
link-function
link-function可以注冊DOM監(jiān)聽器,同時更新DOM,更多l(xiāng)ink-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”))
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
理解AngularJs篇:30分鐘快速掌握AngularJs
這篇文章主要介紹了理解AngularJs篇:30分鐘快速掌握AngularJs,詳細介紹了AngularJs所涉及的知識點,有興趣的可以了解一下。2016-12-12
Angular2 自定義validators的實現(xiàn)方法
angular 當需要form表單需要驗證時,angular自帶了許多校驗器,但是很多時候自帶的無法滿足業(yè)務(wù)需求,這時候就需要自定義的校驗器,下面通過本文給大家分享Angular2 自定義validators的實現(xiàn)方法,需要的朋友參考下吧2017-07-07
探討AngularJs中ui.route的簡單應(yīng)用
這篇文章主要介紹了AngularJs中ui.route的簡單應(yīng)用,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-11-11
angular + express 實現(xiàn)websocket通信
最近需要實現(xiàn)一個功能,后端通過TCP協(xié)議連接雷達硬件的控制器,前端通過websocket連接后端,當控制器觸發(fā)消息的時候,把信息通知給所以前端,本文給的大家講解angular + express 實現(xiàn)websocket通信的思路,感興趣的朋友一起看看吧2023-09-09
AngularJS中的$watch(),$digest()和$apply()區(qū)分
這篇文章主要介紹了AngularJS中的$watch(),$digest()和$apply()區(qū)分,感興趣的朋友可以參考一下2016-04-04
詳解Angular5/Angular6項目如何添加熱更新(HMR)功能
這篇文章主要介紹了詳解Angular5/Angular6項目如何添加熱更新(HMR)功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10
Angular-Ui-Router+ocLazyLoad動態(tài)加載腳本示例
本篇文章主要介紹了Angular-Ui-Router+ocLazyLoad動態(tài)加載腳本示例,可以提高加載速度,使用戶體驗更好,有興趣的可以了解一下。2017-03-03

