今天這篇文章,讓你徹底學會props屬性……
props主要用于組件的傳值,他的作業就是為了接收外面傳過來的資料,與data、el、ref是一個級別的配置項,
問題一:那props具體是怎么使用呢?原理又是什么呢?往下看
1、【定義被呼叫組件】首先,我們先定義一個person組件,用于顯示個人資訊的組件,我們放了一個人的姓名,性別,以及年齡,定義好這個組件之后,就可以等待其他組件進行呼叫,那么既然別的組件可以呼叫,我們就需要再定義一個props屬性,用于接收別的組件傳進來的值,

注意:組件中name、sex、age都是一個prop,將三個屬性放到一起,就是props,這就是props的由來,是prop的復數形式,代表多個prop屬性的集合,
2、【呼叫組件】此時我們再定義一個info組件,用于展示這個人的基本資訊,進行對person組價的呼叫實作資訊的展示,分為下圖四個步驟進行呼叫,并傳入引數

3、【看效果】傳入成功,

問題二:那如果我們想給年齡加1歲,怎么實作?
我們可能會直接這樣加1

看效果是否能實作,變成19,看下圖顯然是不正確的,因為你傳入的年齡是個字串18,所以加1只會在18后面進行拼接,

然后有的人說,那傳數字,怎么傳數字呢?很簡單,一個符號搞定,
我們只需要在age前面加上冒號 :他就會只識別雙引號里面的東西18 ,否則識別的是雙引號18

看下效果,此時就成功了,

問題三:對于年齡這一型別,我們最希望拿到的是什么資料型別?肯定是數字型別,但是有人非要傳字串型別,就會影響我們對年齡的計算,比如上面的加1……那么我們如何限制型別呢?
這時候props不能再用[]去定義,需要用{},因為限制型別時,props就是作為一個物件去使用;
下面就是我們將三個屬性分別做了限制,

我們把年齡做了number型別限制后,再傳入字串18,看有什么變化?

此時發現控制臺,會報錯,顯示age的資料型別不匹配,

雖然不影響展示,但是會報錯,這可以給我們提供一個明確的提示,方便我們規范的傳入資料,

問題四:可以限制型別,那是不是也可以限制是否必傳呢?
答:當然可以,
假設姓名必傳,其他非必傳,
型別屬性:type:xx
必傳屬性:required:true
默認屬性:default:xx

name必傳,那么我們不傳試試,年齡不傳默認18
![]()
結果,控制臺同樣報錯,提示,name是必傳屬性,年齡我們沒傳,也成功展示的是默認值,19是因為一開始對年齡進行了加1操作,這樣我們就成功對屬性進行了限制,


對以上總結:
props在接收資料的同時,對資料進行了型別限制+默認值的指定+必要性的限制
問題五:props接收的屬性值可以修改嗎?
答:不可以
我們添加一個button,以及點擊事件

注意:我們要訪問props里面的屬性值,通過this.即可找到

查看結果,發現頁面可以顯示,但是控制臺報錯,因此它是不可修改的


問題六:必須要修改props屬性值,怎么辦?
答:通過data去間接修改
我們在data里面重新定義一個變數去接收props屬性,這個變數最好不要重名,重名的話,優先獲取props屬性值,優先級props>data,然后我們在操作或者html系結值的時候,都去操作data里面新定義的變數

此時可以看到,修改成功,也沒有報錯:

總結:配置項props
-------讓組件接收外部傳來的資料
接收資料三種方式:
(1)只接收:props: ['name','age','sex']
(2)接收并限制型別:props: { "name":Number }
(3)限制型別、限制必要性指定默認值:
props:{
"name":{
type:String,
required:true
},
"age":{
type:Number,
default:18
},
"sex":{
type:String,
default:'男'
},
},
注意:props是只讀的,vue底層會檢測你對props的修改,如果進行了修改,控制臺會報錯,必須修改,就復制一份到data中,通過data去修改資料,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/341908.html
標籤:其他
上一篇:javascript中的陣列方法
下一篇:JavaScript實作鏈式呼叫
