1. 程式人生 > >angular 建立一個簡單的屬性型指令 (動態獲取DOM元素size,對DOM樣式進行改變)

angular 建立一個簡單的屬性型指令 (動態獲取DOM元素size,對DOM樣式進行改變)

一. 在 Angular 中有三種類型的指令:1. 元件 — 擁有模板的指令2. 結構型指令 — 通過新增和移除 DOM 元素改變 DOM 佈局的指令3. 屬性型指令 — 改變元素、元件或其它指令的外觀和行為的指令。

本章主要想介紹一下屬性型指令並建立一個簡單的屬性型指令,屬性型指令:指修改一個現有元素的外觀和行為。在模板中,它們看起來就像是標準的HTML屬性。

例如:ngModel指令就是屬性型指令的一個例子。

二. 建立屬性型指令: 首先我們的需求是建立一個指令,可以動態獲取到當前元素的寬度和高度,當寬度小於一定值時,將該元素的背景色改變。

1. 建立一個size-directive.directive.ts類,內容如下:

    Directive提供@Directive裝飾器功能。

    ElementRef注入到指令建構函式中。這樣程式碼就可以訪問到DOM元素。

    Directive裝飾器函式以配置物件引數的形式,包含了指令的元資料。

@Directive元資料之後就是該指令的控制器類,名叫sizeDirective它包含該指令的邏輯。 然後匯出sizeDirective,以便讓它能從其它元件中訪問到。

import { Directive, ElementRef, HostListener } from '@angular/core';

@Directive({
  selector: '[sizeDirective]'
})
export class SizeDirectiveDirective {

  constructor(private el: ElementRef) {
  }

  @HostListener('window:load') onLoad() {
    this.fixHeight();
    this.fixWidth();
  }

  @HostListener('window:resize') onResize() {
    this.fixHeight();
    this.fixWidth();
  }

  @HostListener('mouseenter') noMouseEnter() {
    this.el.nativeElement.style.backgroundColor = 'red';
  }

  fixHeight() {
    console.log(this.el.nativeElement.clientHeight);
  }

  fixWidth() {
    console.log(this.el.nativeElement.clientWidth);
    const width = this.el.nativeElement.clientWidth;
    if (width < 480) {
      this.el.nativeElement.style.backgroundColor = 'yellow';
    } else {
      this.el.nativeElement.style.backgroundColor = 'red';
    }
  }
}

2. 在將該類引入到需要的模組中,例如我需要引入到app.module.ts中:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { SizeDirectiveDirective } from './size-directive.directive';

@NgModule({
  declarations: [
    AppComponent,
    SizeDirectiveDirective
  ],
  imports: [
    BrowserModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
3. 將指令加入到所需的元素中:
<div sizeDirective>div元素</div>

最後,div的寬度或高度進行改變後,就會根據自定義的sizeDirective指令中的邏輯,將div進行樣式的改變。

相關推薦

angular 建立一個簡單屬性指令 動態獲取DOM元素sizeDOM樣式進行改變

一. 在 Angular 中有三種類型的指令:1. 元件 — 擁有模板的指令2. 結構型指令 — 通過新增和移除 DOM 元素改變 DOM 佈局的指令3. 屬性型指令 — 改變元素、元件或其它指令的外觀和行為的指令。本章主要想介紹一下屬性型指令並建立一個簡單的屬性型指令,屬性

Spring Boot學習筆記之使用Spring Boot建立一個簡單的web專案工具使用IntelliJ IDEA

新建Maven專案 1.File --> New Project --> Maven --> Next 2.填寫專案資訊,完成之後點選Next,然後點選Finish 3.專案建好之後如下圖所示 修改pom檔案中的配置資訊 <?xml version

使用tf.estimator建立一個簡單的神經網路所用到的所有知識點進行講解

溫馨提示 所有的知識點在後面的程式碼中都有用到哈,有的知識點在看得時候如果不理解也沒事,看了最後的程式碼就會明白 知識點 下面開始講解知識點 tf.estimator.inputs.numpy_input_fn tf.estimator.inputs.numpy_inp

第七章 使用BI Publisher開發報表-建立一個簡單的RTF模板2/5

第七章建立一個簡單的RTF模板 安裝好Oracle BI Publisher Desktop之後,可以使用Word中的BI Publisher外掛來進行報表佈局模板(RTF格式)設計。 1.開啟W

Json過濾器基於spring自定義註解的方式欄位進行過濾

在實際的開發過程中,會經常遇到如下情景: 後臺需要給前端返回JSON資料,但是查詢出來返回的資料裡面有很多屬性是不需要的 本文通過自定義註解的方式進行實現,對response進行攔截,通過註解引數,設定欄位資訊(即,過濾哪些欄位,保留哪些欄位),並將bean自動封裝

Angular 指令Directive屬性指令

Angular 指令(Directive)屬性型指令 在Angular中有三種指令型別 元件 :擁有模板的指令 結構型指令:通過新增或移除DOM來改變DOM佈局的指令 屬性型指令:改變元素,元件或其他指令的外觀和行為的指令 自

Socket的應用——建立一個簡單的回顯客戶端/伺服器

在這篇文章中,我們將利用Python的Socket模組,編寫一個簡單的本地TCPC/S應用:建立Server和Client,在開始時Server等待Client的請求過程中,Server顯示出等待資訊,之後Client連線上Server併發送訊息,最後Server則要回顯出來自客戶端的所有輸出,併發

Spring Boot 基礎篇建立一個簡單的SpringBoot專案

Spring Boot建立   首先IDEA新建一個專案,File-New-Project-Spring Initializr,然後Next,如下圖: 填寫專案資訊: 填寫專案使用到的技術,上面的SpringBoot版本建議選擇最新的穩定版,下面勾選上Web就可

【itext學習之路】-------第一篇建立一個簡單的pdf文件

iText是著名的開放原始碼的站點sourceforge一個專案,是用於生成PDF文件的一個java類庫。通過iText不僅可以生成PDF或rtf的文件,而且可以將XML、Html檔案轉化為PDF檔案 本教程中,首先要說明的是,itext技術在網上很少能有一個相對全面文

JavaIDEA 建立一個簡單的 “Hello world”

  早就聽說  IDEA   好用,今天晚上終於下載下來了, 下載---安裝--破解  一氣呵成~   起飛的地址看下面,這哥們的部落格也很帥~ https://www.cnblogs.com/jajian/p/79890

Spring Boot學習實踐1建立一個簡單的spring boot應用

一、使用idea建立一個簡單的Spring Boot應用程式 環境準備: idea:2018.2 jdk: 1.8 spring boot:是2.0版本以上的 以上環境可以根據實際情況去調整。 (1)首先找到idea建立應用的New Project,選擇好

Angular 屬性指令 directive

1.使用命令建立指令    ng  g  d  yourDirectiveName 2.yourDirectiveName.directive.ts程式碼: import {Directive,ElementRef,HostListener,Input} from '@an

建立一個簡單的springMVC+mybatis專案

  這裡我們只是簡單介紹搭建一個springMVC+mybatis專案的基本操作,不做過多的理論介紹 首先,建立一個專案,引入相應的java包 點選next,直到一下頁面,勾選建立通用的web.xml後點擊finish完成專案建立 匯入springMVC web專案的相關jar包

建立一個簡單gradle指令碼

update time:2019-1-10 Author:要你命三千又三千 type: 學習筆記 文章目錄 問題一:如何是用gradle 搭建的環境建立一個簡單的Gradle指令碼 問題二:gradle Wrapp

使用IDEA建立一個簡單的SpringBootMaven專案

建立SpringBoot專案 圖1 建立專案 圖2 建立SpringBoot專案 圖3 專案配置 注意:第二項Artifact中使用的是包命名 規範,若使用大寫,則會報錯

ios tableView那些事建立一個簡單的tableView

工作也有半年多了!幾乎每個專案中的會用到tableview這個神奇而好用的控制元件,在學習和工作中都會看別人的部落格!對我有很大的幫助,就如同站在巨人的肩膀上的感覺吧 哈哈!於是決定重新開始寫部

Hibernate學習筆記——建立一個簡單的Hibernate專案

首先來看看Hibernate開發的一個簡單流程: (1)準備開發環境,建立Hibernate專案。 (2)在資料庫中建立資料表。 (3)建立持久化類。 (4)設計對映檔案,使用Hibernate對映檔案將POJO物件對映到資料庫。 (5)建立Hibernate的配置檔

mysql 自定義函式1建立一個簡單函式

1、先建立一個無參的自定義函式: -- 如果有這個函式,就刪除 drop function if exists hello; -- 建立一個無參的函式 create function hello (

Dubbo學習筆記—— 建立一個簡單的Dubbo入門專案演示HelloWorld

一、Dubbo簡介1、dubbo是什麼?▶ 一個分散式服務框架▶ 一個RPC遠端服務呼叫方案▶ 一個SOA服務治理方案2、dubbo架構圖3、節點說明Provider:暴露服務的服務提供方Consumer:呼叫遠端服務的服務消費方Registry:發現並註冊服務的服務註冊中心

SmartSql使用教程1——初探建立一個簡單的CURD介面服務

一、引言 最近SmartSql被正式引入到了NCC,藉著這個契機寫一個使用教程系列   二、SmartSql簡介[摘自官方文件] 1. SmartSql是什麼? SmartSql = MyBatis + Cache(Memory | Redis) + R/W Splitting +Dy