Vue:子コンポーネントが親コンポーネントデータを変更するためのメソッドと、親コンポーネントデータ(プロパティ)を変更するためのパラメーター付きの子コンポーネント

序文:

小道具プロパティの特性:(単方向データフロー)ビジネスでは、小道具を変更する必要がある2つの状況が発生します。1つ目は、親コンポーネントが初期値を渡し、子コンポーネントがそれを初期値として保存することです。これは、独自のスコープで自由に使用および変更できます。この場合、親コンポーネントのプロパティを参照して、コンポーネントデータで別のデータを宣言できます。

$排出:$排出は、現在のインスタンスでイベントをトリガーします。これは、親コンポーネント(バブルアップ)でイベントをトリガーすることとしても簡単に理解できます


ここに画像の説明を挿入特定の$エミットについては、公式ドキュメントを参照してください:https://cn.vuejs.org/v2/api/#vm-emit


パラメータタイプなし:

ここに画像の説明を挿入ケース:(いくつかの説明については説明を参照)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <div :style="{fontSize:fontSize+'px'}">{{pmsg}}</div>
        <!-- 注意要加单位px 不然不会生效 -->
        <menu-item :parr="parr" @enlarge-text="handle"></menu-item>
    </div>
    <script type="text/javascript" src="js/vue.js"></script>
    <script type="text/javascript">
        // 子组件向父组件传值-基本用法
        //props传递数据原则:单向数据流

        Vue.component('menu-item', {
            props: ['parr'],
            template: `
        <div>
          <ul>
            <li :key='index' v-for='(item,index) in parr'>{{item}}</li>
          </ul>
          <button @click='parr.push("lemon")'>添加lemon水果(这种方法不推荐)</button>
          <!--直接子组件操作父组件传过来的数据 但是这种方法不推荐!!!-->
          <!-- props传递过来的数据是单向数据流 只允许父组件向子组件中传递数据 但是不允许直接操作props中的数据-->  
          <button @click="$emit('enlarge-text')">扩大父组件字体大小</button>
        </div>
      `
        });
        var vm = new Vue({
            el: '#app',
            data: {
                pmsg: '父组件中内容(初始size=10px 每次加5px)',
                parr: ['apple', 'orange', 'banana'],
                fontSize: 10
            },
            methods: {
                handle: function() {
                    // 扩大字体大小
                    this.fontSize += 5;
                }
            }
        });
    </script>
</body>

</html>

パラメータあり

ここに画像の説明を挿入結果:
ここに画像の説明を挿入

ケース:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <div :style='{fontSize: fontSize + "px"}'>{{pmsg}}</div>
    <menu-item :parr='parr' @enlarge-text='handle($event)'></menu-item>
  </div>
  <script type="text/javascript" src="js/vue.js"></script>
  <script type="text/javascript">
    /*
      子组件向父组件传值-携带参数
    */
    
    Vue.component('menu-item', {
      props: ['parr'],
      template: `
        <div>
          <ul>
            <li :key='index' v-for='(item,index) in parr'>{{item}}</li>
          </ul>
          <button @click='$emit("enlarge-text", 5)'>扩大父组件中字体大小</button>
          <button @click='$emit("enlarge-text", 10)'>扩大父组件中字体大小</button>
        </div>
      `
    });
    var vm = new Vue({
      el: '#app',
      data: {
        pmsg: '父组件中内容',
        parr: ['apple','orange','banana'],
        fontSize: 10
      },
      methods: {
        handle: function(val){
          // 扩大字体大小
          this.fontSize += val;
        }
      }
    });
  </script>
</body>
</html>

元の記事を28件公開 賞賛7件 訪問数1184件

おすすめ

転載: blog.csdn.net/haduwi/article/details/105163056