摘要:代碼原生渲染有時(shí)數(shù)據(jù)中攜帶了標(biāo)簽,輸出它們時(shí),按文本解析,如使用輸出原生的使用原生指令解析數(shù)據(jù)中標(biāo)簽為原生你的站點(diǎn)上動(dòng)態(tài)渲染的任意可能會(huì)非常危險(xiǎn),因?yàn)樗苋菀讓?dǎo)致攻擊。
代碼
原生html渲染v-html有時(shí)數(shù)據(jù)中攜帶了Html標(biāo)簽,輸出它們時(shí),按文本解析,如:
new Vue({ data: { title:"使用
", } }).$mount("#app-1")v-html
輸出原生的html
{{title}}
使用原生指令v-html解析數(shù)據(jù)中標(biāo)簽為原生html
你的站點(diǎn)上動(dòng)態(tài)渲染的任意 HTML 可能會(huì)非常危險(xiǎn),因?yàn)樗苋菀讓?dǎo)致 XSS 攻擊。請(qǐng)只對(duì)可信內(nèi)容使用 HTML 插值,絕不要對(duì)用戶提供的內(nèi)容使用插值。
如:
new Vue({ data: { title:"使用
", recieveMessage:"", } }).$mount("#app-1")v-html
輸出原生的html
使用時(shí)要注意這種情況。插入
Vue.set以下兩種情形的數(shù)據(jù)變化,vue無(wú)法再視圖中作出響應(yīng)
當(dāng)你利用索引直接設(shè)置一個(gè)項(xiàng)時(shí),例如:vm.items[indexOfItem] = newValue
當(dāng)你修改數(shù)組的長(zhǎng)度時(shí),例如:vm.items.length = newLength
如添加以下代碼,點(diǎn)擊按鈕修改
modifyItem(){ this.boxOffice[0] = { name: "The Last Jedi", year: 201  7, sells: "13.32", director: { firstname: "yannie", lastname: "cheung", age: "17" } } this.boxOffice.length = 5 }
沒(méi)有任何響應(yīng),但事實(shí)上值已經(jīng)更新,
不過(guò)設(shè)置某索引對(duì)應(yīng)對(duì)象的屬性,時(shí)會(huì)有響應(yīng)的
modifyItem(){ //無(wú)響應(yīng) this.boxOffice[0] = { name: "The Last Jedi", year: 2017, sells: "13.32", director: { firstname: "yannie", lastname: "cheung", age: "17" } } this.boxOffice.length = 5 //有響應(yīng) this.boxOffice[1].name = "somename" }
索引值和長(zhǎng)度的改變是因?yàn)槠渌淖?this.boxOffice[1].name = "somename")觸發(fā)了響應(yīng),而并非他們自身是響應(yīng)式的。
為了解決這個(gè)問(wèn)題提供了兩種:使用變異方法splice()和Vue.set
//設(shè)置 modifyItem(){ //無(wú)響應(yīng) // this.boxOffice[0] = { name: "The Last Jedi", year: 2017, sells: "13.32", director: { firstname: "yannie", lastname: "cheung", age: "17" } } // this.boxOffice.length = 5 //無(wú)響應(yīng)的解決方法 // this.$set 等價(jià)于 Vue.set Vue.set(this.boxOffice, 0, { name: "The Last Jedi", year: 2017, sells: "13.32", director: { firstname: "yannie", lastname: "cheung", age: "17" }}) // this.boxOffice.splice(0, 1, { name: "The Last Jedi", year: 2017, sells: "13.32", director: { firstname: "yannie", lastname: "cheung", age: "17" }}) //修改長(zhǎng)度 this.boxOffice.splice(5) //有響應(yīng) // this.boxOffice[1].name = "somename" }
此時(shí),點(diǎn)擊按鈕設(shè)置新?tīng)顟B(tài),立刻作出響應(yīng)。
對(duì)于對(duì)象而言,屬性的添加或刪除無(wú)法響應(yīng),如
//添加對(duì)象屬性 modifyObject(){ this.boxOffice[0].director.sex = "male" }
可以使用Vue.set解決這個(gè)問(wèn)題
或者將對(duì)象原先屬性和新增屬性合并成新對(duì)象再賦給該對(duì)象,這使我們可以添加多個(gè)屬性,如:
//methods //添加對(duì)象屬性 modifyObject(){ // 無(wú)響應(yīng) // this.boxOffice[0].director.sex = "male" //解決方法 Vue.set(this.boxOffice[0].director, "sex", "male") this.boxOffice[0].director = Object.assign({}, this.boxOffice[0].director,{ aliasname:"kanzaki urumi", graduation: "NUIST" }) }template
同 v-if,包裹多個(gè)元素,下節(jié)有使用到。
v-if、v-for優(yōu)先級(jí)v-for 的優(yōu)先級(jí)比 v-if 高。就是說(shuō)可以向下面這樣,先展開(kāi)所有列表項(xiàng),之后 v-if 將作用于每個(gè)列表項(xiàng)。
為影片添加是否上映屬性run
boxOffice: [ { name: "Avatar", year: 2009, sells: "27.88",run:true, director: { firstname: "yannie", lastname: "cheung", age: "17" } }, { name: "Frozen", year: 2013, sells: "12.765",run:false }, { name: "Furious 7", year: 2015, sells: "15.15",run:true }, { name: "Iron Man 3", year: 2013, sells: "12.154",run:false }, { name: "Titanic", year: 1997, sells: "21.868",run:false }, { name: "Spectre", year: 2015, sells: "8.722",run:true }, { name: "Inception", year: 2010, sells: "8.255",run:false }, { name: "Jurassic World", year: 2015, sells: "16.99",run:false } ]
v-for|if 的優(yōu)先級(jí)
如果想設(shè)置在某條件下循環(huán)是否執(zhí)行,那么可以在外層加上 v-if
v-for|if 的優(yōu)先級(jí)
和在原生元素上使用一樣,只是必須使用 key
new Vue({ data: { boxOffice: [ { id:1,name: "Avatar", year: 2009, sells: "27.88", run: true, director: { firstname: "yannie", lastname: "cheung", age: "17" } }, { id:2,name: "Frozen", year: 2013, sells: "12.765", run: false }, { id:3,name: "Furious 7", year: 2015, sells: "15.15", run: true }, { id:4,name: "Iron Man 3", year: 2013, sells: "12.154", run: false }, { id:5,name: "Titanic", year: 1997, sells: "21.868", run: false }, { id:6,name: "Spectre", year: 2015, sells: "8.722", run: true }, { id:7,name: "Inception", year: 2010, sells: "8.255", run: false }, { id:8,name: "Jurassic World", year: 2015, sells: "16.99", run: false } ] }, components: { "child": { props:["bo"], template: "
更多內(nèi)容參見(jiàn)組件與單文件組件部分
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/94463.html
摘要:依舊采取傳統(tǒng)的開(kāi)發(fā)技術(shù)棧進(jìn)行開(kāi)發(fā),同時(shí)在終端的運(yùn)行體驗(yàn)不輸。首先來(lái)看下前端開(kāi)發(fā)框架目前與構(gòu)成了三大最流行的前端開(kāi)發(fā)框架,具有組件化以及三大特性,還學(xué)習(xí)的,引入了狀態(tài)管理模塊。 摘要: WEEX依舊采取傳統(tǒng)的web開(kāi)發(fā)技術(shù)棧進(jìn)行開(kāi)發(fā),同時(shí)app在終端的運(yùn)行體驗(yàn)不輸native app。其同時(shí)解決了開(kāi)發(fā)效率、發(fā)版速度以及用戶體驗(yàn)三個(gè)核心問(wèn)題。那么WEEX是如何實(shí)現(xiàn)的?目前WEEX已經(jīng)完全開(kāi)...
摘要:于是后來(lái)業(yè)界開(kāi)始探索依舊利用技術(shù)棧開(kāi)發(fā)出媲美原生體驗(yàn)的方案,于是以為代表云原生開(kāi)發(fā)框架開(kāi)始出現(xiàn)。依舊采取傳統(tǒng)的開(kāi)發(fā)技術(shù)棧進(jìn)行開(kāi)發(fā),同時(shí)在終端的運(yùn)行體驗(yàn)不輸。其同時(shí)解決了開(kāi)發(fā)效率發(fā)版速度以及用戶體驗(yàn)三個(gè)核心問(wèn)題。 摘要: WEEX依舊采取傳統(tǒng)的web開(kāi)發(fā)技術(shù)棧進(jìn)行開(kāi)發(fā),同時(shí)app在終端的運(yùn)行體驗(yàn)不輸native app。其同時(shí)解決了開(kāi)發(fā)效率、發(fā)版速度以及用戶體驗(yàn)三個(gè)核心問(wèn)題。那么WEEX...
閱讀 1147·2021-11-23 09:51
閱讀 2512·2021-09-29 09:34
閱讀 3213·2019-08-30 14:20
閱讀 1161·2019-08-29 14:14
閱讀 3242·2019-08-29 13:46
閱讀 1141·2019-08-26 13:54
閱讀 1688·2019-08-26 13:32
閱讀 1484·2019-08-26 12:23