天天看點

子元件props接受父元件傳遞的值 能修改嗎?

vue2.0 子元件props接受父元件傳遞的值,能不能修改的問題整理

父元件代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

<!--  -->

<

template

>

<

div

class=''>

<

el-link

type="danger">傳值為對象:</

el-link

>

<

div

>

父元件中顯示fatherData的值:{{fatherData}}

<

l0705components

:fatherData="fatherData"></

l0705components

>

</

div

>

<

br

><

br

><

br

>

<

el-link

type="danger">傳值為字元串,使用v-model傳值:</

el-link

>

<

div

>

父元件中顯示fatherData2的值:{{fatherData2}}

<

l0705components

v-model="fatherData2"></

l0705components

>

</

div

>

<

br

><

br

>

<

el-link

type="danger">傳值為字元串:</

el-link

>

<

div

>

父元件中顯示fatherData3的值:{{fatherData3}}

<

l0705components

:fatherData3="fatherData3"></

l0705components

>

</

div

>

</

div

>

</

template

>

<

script

>

import l0705components from './views/l0705components'

export default {

name: "L0705L",

components: {

l0705components

},

data() {

// 這裡存放資料

return {

fatherData:{

name:"李四",

age:"14"

},

fatherData2:'父元件的資料2',

fatherData3: '父元件的資料3'

}

}

}

</

script

>

  子元件代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

<!--  -->

<

template

>

<

div

class=''>

<

div

v-if="fatherData">

子元件中顯示fatherData的值:{{fatherData}}

<

el-button

type="danger" @click="changeFather">

點選修改父元件fartherData的值-姓名改為“王五”

</

el-button

>

</

div

>

<

div

v-if="value!==''">

<

input

v-model="value">

</

div

>

<

div

v-if="fatherData3!==''">

子元件中顯示fatherData3的值:{{fatherData3}}

<

el-button

type="danger" @click="changeFather3">

點選修改父元件fartherData3的值,改為“哈哈哈哈哈”

</

el-button

>

</

div

>

</

div

>

</

template

>

<

script

>

export default {

props:{

fatherData:{

type:Object

},

value: {

type: String,

default: ''

},

fatherData3: {

type: String,

default: ''

}

},

name: "l0705components",

data() {

// 這裡存放資料

return {

}

},

// 方法集合

methods: {

changeFather(){

this.fatherData.name = '王五'

},

changeFather3() {

this.fatherData3 = '哈哈哈哈哈'

}

}

}

</

script

>

  頁面展示:

 測試結果說明:

 1.父元件傳遞一個對象,子元件接受,子元件中,直接修改接受到的對象裡面的值,可以修改,父子元件的值都會随之改變

2.使用v-model傳值,修改input裡面的值,會報錯

意思就是props傳遞的值不能進行修改

3.點選修改第三個值,在子元件中的值會修改,但是父元件中不能修改,報錯

總結:

 父子元件傳值時,父元件傳遞的參數,數組和對象,子元件接受之後可以直接進行修改,并且會傳遞給父元件相應的值也會修改。

如果傳遞的值是字元串,直接修改會報錯。

不推薦子元件直接修改父元件中的參數,避免這個參數多個子元件引用,無法找到造成資料不正常的原因

父元件代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

<!--  -->

<

template

>

<

div

class=''>

<

el-link

type="danger">傳值為對象:</

el-link

>

<

div

>

父元件中顯示fatherData的值:{{fatherData}}

<

l0705components

:fatherData="fatherData"></

l0705components

>

</

div

>

<

br

><

br

><

br

>

<

el-link

type="danger">傳值為字元串,使用v-model傳值:</

el-link

>

<

div

>

父元件中顯示fatherData2的值:{{fatherData2}}

<

l0705components

v-model="fatherData2"></

l0705components

>

</

div

>

<

br

><

br

>

<

el-link

type="danger">傳值為字元串:</

el-link

>

<

div

>

父元件中顯示fatherData3的值:{{fatherData3}}

<

l0705components

:fatherData3="fatherData3"></

l0705components

>

</

div

>

</

div

>

</

template

>

<

script

>

import l0705components from './views/l0705components'

export default {

name: "L0705L",

components: {

l0705components

},

data() {

// 這裡存放資料

return {

fatherData:{

name:"李四",

age:"14"

},

fatherData2:'父元件的資料2',

fatherData3: '父元件的資料3'

}

}

}

</

script

>

  子元件代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

<!--  -->

<

template

>

<

div

class=''>

<

div

v-if="fatherData">

子元件中顯示fatherData的值:{{fatherData}}

<

el-button

type="danger" @click="changeFather">

點選修改父元件fartherData的值-姓名改為“王五”

</

el-button

>

</

div

>

<

div

v-if="value!==''">

<

input

v-model="value">

</

div

>

<

div

v-if="fatherData3!==''">

子元件中顯示fatherData3的值:{{fatherData3}}

<

el-button

type="danger" @click="changeFather3">

點選修改父元件fartherData3的值,改為“哈哈哈哈哈”

</

el-button

>

</

div

>

</

div

>

</

template

>

<

script

>

export default {

props:{

fatherData:{

type:Object

},

value: {

type: String,

default: ''

},

fatherData3: {

type: String,

default: ''

}

},

name: "l0705components",

data() {

// 這裡存放資料

return {

}

},

// 方法集合

methods: {

changeFather(){

this.fatherData.name = '王五'

},

changeFather3() {

this.fatherData3 = '哈哈哈哈哈'

}

}

}

</

script

>

  頁面展示:

 測試結果說明:

 1.父元件傳遞一個對象,子元件接受,子元件中,直接修改接受到的對象裡面的值,可以修改,父子元件的值都會随之改變

2.使用v-model傳值,修改input裡面的值,會報錯

意思就是props傳遞的值不能進行修改

3.點選修改第三個值,在子元件中的值會修改,但是父元件中不能修改,報錯

總結:

 父子元件傳值時,父元件傳遞的參數,數組和對象,子元件接受之後可以直接進行修改,并且會傳遞給父元件相應的值也會修改。

如果傳遞的值是字元串,直接修改會報錯。

不推薦子元件直接修改父元件中的參數,避免這個參數多個子元件引用,無法找到造成資料不正常的原因