成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Vue初步了解組件——父子組件

Bowman_han / 1230人閱讀

摘要:父組件的數(shù)據(jù)需要通過才能下發(fā)到子組件中。這是為了防止子組件無意間修改了父組件的狀態(tài),來避免應(yīng)用的數(shù)據(jù)流變得難以理解。另外,每次父組件更新時,子組件的所有都會更新為最新值。

組件 什么是組件?

組件 (Component) 是 Vue.js 最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼。在較高層面上,組件是自定義元素,Vue.js 的編譯器為它添加特殊功能。在有些情況下,組件也可以表現(xiàn)為用 is 特性進(jìn)行了擴(kuò)展的原生 HTML 元素。
也可分為:

有結(jié)構(gòu)HTML

有樣式CSS

有交互(效果)

行為

信號量存數(shù)據(jù)

系統(tǒng)組件

組件的行為可以定制?通過屬性設(shè)置

在Vue中有什么樣的組件(組件進(jìn)行分類):
實現(xiàn)基本功能的基礎(chǔ)的組件(最小的元素)
可復(fù)用的邏輯組件(業(yè)務(wù)組件)
頁面組件

頁面上所有的東西全都是組件:形成了組件樹

局部注冊--自定義組件

你不必把每個組件都注冊到全局。你可以通過某個 Vue 實例/組件的實例選項 components 注冊僅在其作用域中可用的組件:

//在html中是使用

var Child = {
  template: "
A custom component!
" } var vm = new Vue({ el: "#app", components: { // Child 將只在父組件模板中可用 Child } })

這種封裝也適用于其它可注冊的 Vue 功能,比如指令。

組件樹

頁面上所有的東西全都是組件:形成了組件樹

// 頭部組件
var AppHead = {
    template: `
app head
` }; // 主窗口單元組件 var AppMainUnit = { template: `
app main unit
` } // 主窗口組件 var AppMain = { template: `
app main
`, components: { AppMainUnit } } // 側(cè)邊欄單元組件 var AppSideUnit = { template: `
app side unit
` } // 側(cè)邊欄組件 var AppSide = { template: `
app side
`, comp onents: { AppSideUnit } } // 根組件 var vm = new Vue({ el: "#app", components: { AppHead, AppMain, AppSide } })
組件data

子組件與根組件的data用法不同

根組件data:

var vm = new Vue({
    el: "#app",
    data: {
        msg: ""
    },
    components: {
        MyLi
    }
})

{{msg}}
調(diào)用其中的msg

子組件data:

var MyLi = {
//那么 Vue 會停止運(yùn)行,并在控制臺發(fā)出警告,告訴你在組件實例中 data 必須是一個函數(shù)。
    data() {
        console.log(1);
        return {
            counter: 0
        }
    },
    template: ``
}
//根組件
var vm = new Vue({
    el: "#app",
    data: {
        msg: "123"
    },
    components: {
        MyLi
    }
})




輸出結(jié)果:0 0 0
props聲明

組件實例的作用域是孤立的。這意味著不能 (也不應(yīng)該) 在子組件的模板內(nèi)直接引用父組件的數(shù)據(jù)。父組件的數(shù)據(jù)需要通過 prop 才能下發(fā)到子組件中。

var Child = {
    template: `{{message}}{{myMessage}}`,
//聲明當(dāng)前組件內(nèi)部能夠接受一個message的屬性,如果是駝峰式命名,在傳遞參數(shù)時使用小寫,
    props: ["message","myMessage"]
}
var vm = new Vue({
    el: "#app",
    data: {
        parentMessage:"h"
    },
    components: {
        Child
    }
})

在html中使用:

//父組件賦值到子組件

//實時同步的pareMessage值
props--作為組件內(nèi)部的初始狀態(tài)

Prop 是單向綁定的:當(dāng)父組件的屬性變化時,將傳導(dǎo)給子組件,但是反過來不會。這是為了防止子組件無意間修改了父組件的狀態(tài),來避免應(yīng)用的數(shù)據(jù)流變得難以理解。
另外,每次父組件更新時,子組件的所有 prop 都會更新為最新值。這意味著你不應(yīng)該在子組件內(nèi)部改變 prop。如果你這么做了,Vue 會在控制臺給出警告。
在兩種情況下,我們很容易忍不住想去修改 prop 中數(shù)據(jù):

Prop 作為初始值傳入后,子組件想把它當(dāng)作局部數(shù)據(jù)來用;

Prop 作為原始數(shù)據(jù)傳入,由子組件處理成其它數(shù)據(jù)輸出。

var Child = {
    template: `
{{initCounter}} {{childCounter}}
`, props:["initCounter"], data(){ //保存初始值到childCounter并返回,發(fā)生變化的是當(dāng)前的childCounter的值 return {childCounter: this.initCounter} } } var vm = new Vue({ el: "#app", data: { counter: 0 }, components:{ Child } }) 在html中調(diào)用:
props的計算后屬性

注意在 JavaScript 中對象和數(shù)組是引用類型,指向同一個內(nèi)存空間,如果 prop 是一個對象或數(shù)組,在子組件內(nèi)部改變它會影響父組件的狀態(tài)。

var Child = {
    template: `
{{size}} {{normalSize}}
`, props: ["size"], computed: { normalSize(){ return this.size.trim().toLowerCase(); } } } var vm = new Vue({ el: "#app", data:{ parentSize: " THREE" }, components:{ Child } }) 在html中調(diào)用:
props--驗證

我們可以為組件的 prop 指定驗證規(guī)則。如果傳入的數(shù)據(jù)不符合要求,Vue 會發(fā)出警告。這對于開發(fā)給他人使用的組件非常有用。

要指定驗證規(guī)則,需要用對象的形式來定義 prop,而不能用字符串?dāng)?shù)組:

var Child = {
    template: `
{{pa}} {{pb}} {{pc}} {{pd}} {{pe}} {{pf}}
`, props: { pa: Number, pb: [String, Number], pc: { type: Number, required: true//必填 }, pd: { type: Number, default: 100//默認(rèn)值 }, pe: { type: Object, default: function(){ return { hello : "world" } } }, pf: { type: Number, validator: function(v){ return v > 100 }//自定義屬性判斷 } } } var vm = new Vue({ el: "#app", data:{ pa: 2, pb: "abc", pc: 2, pd: 50, pe: {}, pf: 120 }, components:{ Child } }) 在html中使用:
type 可以是下面原生構(gòu)造器:

String

Number

Boolean

Function

Object

Array

Symbol

type 也可以是一個自定義構(gòu)造器函數(shù),使用 instanceof 檢測。
當(dāng) prop 驗證失敗,Vue 會拋出警告 (如果使用的是開發(fā)版本)。注意 prop 會在組件實例創(chuàng)建之前進(jìn)行校驗,所以在 default 或 validator 函數(shù)里,諸如 data、computed 或 methods 等實例屬性還無法使用。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/51505.html

相關(guān)文章

  • 關(guān)于vuevuex的一些初步小結(jié)

    摘要:只能是同步函數(shù),原因是無法捕捉異步函數(shù)的快照。除了這三個概念外,還有類比計算屬性,用于從派生出一些值分割較大的狀態(tài)樹,便于管理。處理表單可手動監(jiān)聽或是使用帶的雙向綁定計算屬性。 一、Vue組件的創(chuàng)建 一般語法: Vue.component(tagName, options) 務(wù)必在根組件實例化之前注冊組件 組件options說明: data: 必須是一個函數(shù),目的在于返回獨立的對象...

    joywek 評論0 收藏0
  • Vue 組件間通信方式

    摘要:本身提供哪幾種通信方式首先靈感源于,支持雙向綁定,本質(zhì)還是單向數(shù)據(jù)流。跟一樣,組件間最基本的數(shù)據(jù)流是通過向子組件傳遞數(shù)據(jù)。但是在卻很少使用,因為組件可以自定義事件,即后面的組件間通信方式其實就是訂閱發(fā)布模式。 例子是在 jsrun.net 平臺編寫,不支持移動端平臺,所以本文建議在 PC 端進(jìn)行閱讀。 Vue 是數(shù)據(jù)驅(qū)動的視圖框架,那么組件間的數(shù)據(jù)通信是必然的事情,那么組件間如何進(jìn)行數(shù)...

    hss01248 評論0 收藏0
  • vue -- 非父子組件傳值,事件總線(eventbus)的使用方式

    摘要:我的個人博客地址資源地址非父子組件傳值,事件總線的使用方式我的博客地址如果您對我的博客內(nèi)容有疑惑或質(zhì)疑的地方,請在下方評論區(qū)留言,或郵件給我,共同學(xué)習(xí)進(jìn)步。 歡迎訪問我的個人博客:http://www.xiaolongwu.cn 前言 先說一下什么是事件總線,其實就是訂閱發(fā)布者模式; 比如有一個bus對象,這個對象上有兩個方法,一個是on(監(jiān)聽,也就是訂閱),一個是emit(觸發(fā),也就...

    zone 評論0 收藏0
  • Vue父子組件通信的三兩事(prop、emit)

    摘要:的單向數(shù)據(jù)傳遞直接作為一個本地變量下面是我的子組件這是父組件給我傳的數(shù)據(jù)運(yùn)行結(jié)果如下圖子組件向父組件傳遞數(shù)據(jù)基本使用子組件向父組件傳遞數(shù)據(jù),不能像上面一樣實時的傳遞數(shù)據(jù),必須通過事件觸發(fā)。 組件是Vue核心功能之一,合理的組件化,可以減少我們代碼的冗余,提高項目的可維護(hù)性。下面,我將由淺入深的講Vue的組件在講之前,首先我們先了解一下組件的命名。 HTML是對特征名不敏感的語言,他...

    darcrand 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<