gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费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號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
欧美日韩大尺度| 久久99爱视频| 三级一区二区三区| 国产a级片网站| 91小视频网站| www.亚洲成人网| 亚洲视频第二页| 国产性生交xxxxx免费| 99视频精品全部免费看| 日本中文字幕高清| 国产精品人人妻人人爽人人牛| 在线观看av免费观看| 精品久久久久av| 欧美性潮喷xxxxx免费视频看| 在线观看免费视频高清游戏推荐| 国产精品动漫网站| 亚洲熟妇av一区二区三区漫画| 毛片av在线播放| 久久综合亚洲精品| 精品少妇人欧美激情在线观看| 最新黄色av网站| 国产精品久久久影院| 日本香蕉视频在线观看| 国产美女主播在线| 国产91对白刺激露脸在线观看| 色综合av综合无码综合网站| 国产成人无码一二三区视频| 激情六月丁香婷婷| 伊人成人222| 特级西西人体www高清大胆| 成年丰满熟妇午夜免费视频 | 中文字幕有码av| 精品久久久久久久无码| 中文 日韩 欧美| 18禁网站免费无遮挡无码中文| 男人天堂999| 国产一二三四区在线观看| 北条麻妃在线视频观看| 永久免费在线看片视频| 性欧美大战久久久久久久| 一级 黄 色 片一| 91猫先生在线| 中文精品无码中文字幕无码专区| 91视频免费版污| 国产av天堂无码一区二区三区| 咪咪色在线视频| 久久久国产精华液999999| 日日噜噜夜夜狠狠久久丁香五月 | 成人在线国产视频| 欧美激情第3页| 国产三级精品三级在线| 欧美视频第一区| 国内外成人激情视频| 久久久久免费看黄a片app| 丁香六月激情网| 亚洲中文字幕无码不卡电影| 国产日韩成人内射视频| 天天爽人人爽夜夜爽| 超碰超碰在线观看| 国产探花在线观看视频| 久久久久久久久影视| 国产自产在线视频| 91国产精品视频在线观看| 久久综合伊人77777麻豆最新章节| 国产黄色特级片| 天堂中文av在线| 成年人午夜视频在线观看 | 国产精品专区在线| 茄子视频成人免费观看| 九九热免费在线观看| 麻豆传媒网站在线观看| 日本一本二本在线观看| 亚洲欧美日韩一二三区| 免费国产a级片| 久久www视频| 国产精品久久久久久久av福利| 青青视频在线播放| 粉嫩av一区二区三区天美传媒| 日本三级免费观看| 草草视频在线免费观看| 久久综合亚洲精品| av污在线观看| av在线网址导航| 欧在线一二三四区| 国产一区二区在线视频播放| 在线观看av的网址| 日本wwwcom| japanese在线播放| 国产黄色激情视频| 男人日女人视频网站| 妞干网在线视频观看| 加勒比成人在线| 亚洲国产精品成人天堂| 日韩中字在线观看| 999精品视频在线| 日本在线播放一区二区| 99日在线视频| 成年人网站国产| 杨幂毛片午夜性生毛片| 在线观看日本一区二区| 精品日韩在线播放| 国产成人a亚洲精v品无码| 国产成人久久777777| 色噜噜狠狠一区二区三区狼国成人| 日本成人xxx| 一区二区在线播放视频| 伊人精品视频在线观看| 18禁男女爽爽爽午夜网站免费| 日本网站在线看| 亚洲人成无码网站久久99热国产| 国产福利一区视频| 97超碰在线人人| 996这里只有精品| 在线免费黄色小视频| 99sesese| 国产日韩欧美久久| 久久久久久久久久久免费视频| 欧美激情亚洲天堂| 国产手机视频在线观看| 精品久久久99| 午夜激情福利在线| 成人性生生活性生交12| caopor在线视频| 视色视频在线观看| 在线看免费毛片| 天天久久综合网| 欧美 亚洲 视频| www.av中文字幕| 波多野结衣作品集| 在线免费看v片| 免费人成在线观看视频播放| 日韩欧美精品免费| 午夜精品久久久内射近拍高清| 久久久久人妻精品一区三寸| 91最新在线观看| 色哺乳xxxxhd奶水米仓惠香| 亚洲精品国产suv一区88| 日本网站免费在线观看| 五月天婷婷亚洲| 国产精品12345| 一起操在线视频| 久艹在线免费观看| 国产一区二区在线免费播放| 亚洲区成人777777精品| 亚洲黄色小视频在线观看| 糖心vlog在线免费观看| 亚洲欧美偷拍另类| 色综合av综合无码综合网站| 国产卡一卡二在线| 午夜一区二区视频| 毛片一区二区三区四区| 男人用嘴添女人下身免费视频| 中文字幕在线综合| 艹b视频在线观看| 免费在线观看亚洲视频| www.夜夜爱| 日本日本19xxxⅹhd乱影响| 免费的av在线| 我的公把我弄高潮了视频| 99视频精品全部免费看| 樱空桃在线播放| 国产无限制自拍| 久久国产午夜精品理论片最新版本| 在线视频一二三区| 亚洲熟妇无码一区二区三区导航| 欧妇女乱妇女乱视频| 国产素人在线观看| 国产av无码专区亚洲精品| 青青青在线视频免费观看| www.日本久久| 中文字幕日本最新乱码视频| 成人综合视频在线| 国产免费人做人爱午夜视频| 国产一级特黄a大片免费| 国产黑丝在线视频| 欧美,日韩,国产在线| 污版视频在线观看| 精品少妇一区二区三区在线| 国产三级日本三级在线播放 | 日韩a在线播放| 日本丰满少妇黄大片在线观看| 国产人妻777人伦精品hd| 四季av一区二区三区| 国产69精品久久久久999小说| 爱情岛论坛成人| 免费在线观看亚洲视频| 亚洲国产欧美91| 国产理论在线播放| 国内外成人激情视频| 日韩a级在线观看| 屁屁影院ccyy国产第一页| 毛片毛片毛片毛| 91福利国产成人精品播放| 男人天堂999| 国产v亚洲v天堂无码久久久| 国产在线观看福利| 日韩精品免费播放| 亚洲色图久久久| 欧美视频国产视频| 在线看免费毛片|