久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

Angular開發問題記錄:組件拿不到@Input輸入屬性

最近在工作中實現一個feature的時候,碰到一個小問題:Angular組件拿不到@Input輸入屬性的問題,盡管對這些問題都比較了解,但是找問題是需要一個過程的,所以還是把這個問題總結記錄了下。

Angular開發問題記錄:組件拿不到@Input輸入屬性

前端(vue)入門到精通課程,老師在線輔導:聯系老師
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

【相關教程推薦:《angular教程》】

我需要給一個Component設置一個輸入屬性 @Input,好了,直接上代碼,沒有什么難度。

原代碼是這樣的

@Component({ 	selector: 'my-menu', 	templateUrl: './main-menu.widget.html' }) export class MyMenuWidget {   data: any[];      ...      constructor(...) {        this._changesSubscription = this._service.changes.pipe(             map((data: any[]) => {                     ...                     return data;             })         ).subscribe((data: any[]) => {             this.data = data;         });     }    ... }
登錄后復制

添加一個輸入屬性:

@Component({ 	selector: 'my-menu', 	templateUrl: './main-menu.widget.html' }) export class MyMenuWidget {   @Input() isMainMenu: boolean = false;    data: any[];      ...      constructor(...) {         this._changesSubscription = this._service.changes.pipe(                 map((data: any[]) => {                         ...                         return data;                 })         ).subscribe((data: any[]) => {             if (this.isMainMenu) {                this.data = data.filter((d: any) => d.ID === 233);             }             else {               this.data = data;             }         });     }    ... }
登錄后復制

使用起來

<my-menu [isMainMenu]="mainMenu"></my-menu>
登錄后復制

然后發現MyMenuWidget里的輸入屬性isMainMenu始終拿不到值,難道哪里拼寫有問題嗎?檢查了一下,發現完全沒有問題,但就是拿不到值。

定睛一看,啊啊啊???,對一個Observable的訂閱居然寫在了構造函數里!!!盡管這樣寫在一些場景下是可以正常工作的,不影響代碼功能,但是這種寫法很不規范,就像上面例子中的代碼一樣,引起了問題。所以,平時開發過程中, 不建議去這么寫,那正確的寫法是什么呢?

上代碼。

@Component({ 	selector: 'my-menu', 	templateUrl: './main-menu.widget.html' }) export class MyMenuWidget {   @Input() isMainMenu: boolean = false;    data: any[];      ...      constructor(...) {      ...   }        ngOnInit() {         this._changesSubscription = this._service.changes.pipe(             map((data: any[]) => {                 ...                 return data;             })         ).subscribe((data: any[]) => {             if (this.isMainMenu) {                     this.data = data.filter((d: any) => d.ID === 233);             }             else {                 this.data = data;             }         });     }    ... }
登錄后復制

那么問題來了,為什么同樣的代碼放ngOnInit里就可以正常工作呢?有人會說,我們就是應該放ngOnInit里就行了,放構造函數里就是不行。那為啥不行呢,需要去弄明白。

問題就是,Angular構造函數和ngOnInit函數的區別是什么呢?

區別一

語言上的區別:

先從語言的角度上看一下他們的區別。ngOnInit只是組件類上的一個方法,結構上和類上的其他方法沒有什么不同,只是有一個特定的名字。

export class MyMenuWidget implements OnInit {     ngOnInit() {} }
登錄后復制

實現不實現他都是可以的,我還可以這么寫,完全沒有問題。無需顯示的標記要實現這個接口。

export class MyMenuWidget {    ngOnInit() {} }
登錄后復制

這是ES6的寫法,上面的代碼用ES5怎么寫呢?

構造函數和他完全不一樣,他會在創建類實例的時候會被調用。

export class MyMenuWidget {    constructor(){}       ngOnInit() {} }
登錄后復制

區別二

組件初始化過程的區別:

從組件初始化角度來看兩者的區別,還是很大的。Angular的啟動過程有兩個主要階段:
1. 構造組件樹; 2. 執行變更檢測

當Angular構造組件樹時候,需要創建組件實例,首先就會調用構造函數new 一個實例出來,也就是調用組件類的構造函數。然后調用,包括ngOnInit的所有生命周期鉤子都作為變更檢測階段的一部分被調用。

當Angular開始變更檢測時,組件樹已經構建好,并且已經調用樹中所有組件的構造函數。此外,此時每個組件的模板節點都添加到DOM中。 在這里,你可以使用初始化組件所需的所有數據——DI provider,DOM等。@Input通信機制作為變更檢測階段的一部分進行處理的,所以@Input在構造函數中不可用。

export class MyMenuWidget {    constructor(private _elementRef: ElementRef){      ...    }       ngOnInit() {} }
登錄后復制

區別三

功能上的區別:

對于Angular構造函數,主要用來初始化,和注入依賴關系。通常的做法是,盡可能少放邏輯到構造函數中,有時候,盡管你放了很多邏輯但不影響功能。

對于ngOnInit,Angular在創建組件的DOM,使用構造函數注入所有必須的依賴,完成初始化后調用ngOnInit,這是執行組件初始化邏輯的好地方。

簡單的說 ,constructor構造函數本身是和Angular無關的,ngOnInit這些鉤子函數是Angular里定義的。

總結

現在是不是清楚為什么@Input在構造函數里拿不到值的了吧。以后也清楚哪些邏輯放構造函數里,哪些放ngOnInit里了吧。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
欧美91福利在线观看| 美女在线视频一区| 伊人久久大香线蕉av不卡| 国产资源在线观看入口av| 精品一区二区男人吃奶| 毛片不卡一区二区| 国产欧美三级| 国产精品九九| 久久久国产精品网站| 麻豆成人综合网| 日本一区二区免费高清| 给我免费播放日韩视频| 中文字幕成在线观看| 国产字幕视频一区二区| 国产精品视区| 中文字幕视频精品一区二区三区 | 美女毛片一区二区三区四区| 精品在线99| 美国三级日本三级久久99| 亚洲va久久久噜噜噜久久| 欧美日本久久| av综合电影网站| 亚洲经典在线| 日本午夜精品| 激情黄产视频在线免费观看| 亚洲精品小说| 午夜电影一区| 精品九九在线| 激情综合自拍| 在线精品福利| 精品深夜福利视频| 欧美影院三区| 亚洲精品大片| 国产中文在线播放| 久久xxxx| 欧美黄色精品| 91九色精品| 久久激五月天综合精品| 日韩欧美国产精品综合嫩v| 日韩精品一二三四| 国产精品99久久免费| 久久伦理在线| 日本aⅴ亚洲精品中文乱码| 久久午夜影院| 亚洲高清激情| 免费看日韩精品| 国产va免费精品观看精品视频| 欧美日韩国产免费观看| 日韩一区二区三免费高清在线观看 | 午夜亚洲福利| 日韩欧美一区二区三区免费看| 免费观看久久av| 国产日韩欧美一区二区三区在线观看| 久久视频一区| 国产日韩一区二区三区在线| 99热精品久久| 国产美女久久| 亚洲一区二区三区四区五区午夜| 欧美国产另类| 免费在线观看一区二区三区| 久久不见久久见国语| 99亚洲精品| 亚洲精品福利电影| 日韩国产在线观看一区| 99久久精品网站| 国产精品久久久久久久久久妞妞| 激情欧美丁香| 久久久久久久欧美精品| 另类亚洲自拍| 高清一区二区| 日韩高清不卡一区| 亚洲免费播放| 精品丝袜在线| 欧美1区2区3| 亚洲97av| 亚洲一区日韩在线| 色偷偷色偷偷色偷偷在线视频| 久久国际精品| 亚洲精选91| 亚洲欧美日韩国产一区二区| 在线中文字幕播放| 久久不见久久见国语| 亚洲理论在线| 亚洲激情另类| bbw在线视频| 国产精品一区二区美女视频免费看 | 亚洲综合在线电影| 欧美激情99| 91亚洲精品在看在线观看高清| 夜夜嗨一区二区| 国产91久久精品一区二区| 国内在线观看一区二区三区| 日韩av中文字幕一区| 在线看片日韩| 99综合视频| 三级精品视频| 日韩国产一区| 风间由美中文字幕在线看视频国产欧美| 日韩成人在线看| 免费人成在线不卡| 久久99伊人| 久久亚洲国产精品一区二区| 欧美日韩国产探花| 136国产福利精品导航网址| 波多野结衣久久精品| 激情不卡一区二区三区视频在线| 国产精品久久久亚洲一区| 欧美在线91| 日韩福利在线观看| 日本伊人久久| 香蕉久久久久久久av网站| 黄色亚洲大片免费在线观看| 欧美日韩一二三四| 久久免费大视频| 欧美a级片一区| 欧美日韩激情| 免费国产自久久久久三四区久久 | 久久精品一区二区三区中文字幕| 日本国产亚洲| 四虎在线精品| 国产精品毛片| 一区二区亚洲视频| 亚洲精一区二区三区| 亚洲aa在线| 欧美日韩精品一区二区三区在线观看| 日韩欧美2区| 91麻豆精品| 青青青国产精品| 国产乱码精品一区二区三区四区 | 欧美精品影院| 91p九色成人| 国产精品一区二区免费福利视频| 国产精品免费99久久久| 久久精品国内一区二区三区| 国产aa精品| 欧美中文字幕| 婷婷激情图片久久| 久久久精品网| 欧美日韩高清| 伊人久久亚洲| 青青草伊人久久| 美腿丝袜在线亚洲一区| 韩国女主播一区二区三区| 亚洲伦乱视频| 欧美日韩在线网站| 丝袜亚洲另类欧美| 日韩精品免费观看视频| 国产精品久久久久77777丨| 国产成人久久| 精品欧美激情在线观看| 免费看日韩精品| 91久久精品无嫩草影院| 六月丁香综合在线视频| 一区二区精品伦理...| 成人av动漫在线观看| 亚洲欧美一级| 国产精品sss在线观看av| 理论片午夜视频在线观看| 国精品一区二区三区| 免费成人在线观看| 国产亚洲一区二区三区啪| 成人午夜亚洲| 欧美日韩一区二区高清| 国产精品一区二区三区www | 国产精品高清一区二区| 日韩欧美国产精品综合嫩v| 亚洲综合欧美| 欧美黑人巨大videos精品| 久久精品亚洲人成影院| 一区二区91| 国产一区二区三区四区| 香蕉精品视频在线观看| 亚洲a成人v| 日韩av在线播放网址| 在线视频精品| 精品中文在线| 欧美精品一线| 久久av导航| 亚洲精品成人| 国产精品2区| 日韩一级精品| 你懂的亚洲视频| 99精品99| 国产精久久久| 最新国产拍偷乱拍精品| 国产精品欧美日韩一区| 久久精品亚洲人成影院| 亚洲精品视频一二三区| 黑森林国产精品av| 婷婷五月色综合香五月| 欧美三级网址| 国产日韩亚洲| 亚洲一区二区免费看| 成人在线视频免费| 少妇精品久久久| 久久精品国产亚洲夜色av网站| 国产精品一区二区三区四区在线观看 | 老司机精品久久| 国产高潮在线| 日本伊人午夜精品|