この記事は主に VueJs コンポーネントでの親子コミュニケーションの方法を紹介しています。非常に優れており、必要な友人は参照してください。
コンポーネント (親子コミュニケーション)
1. 概要
別のコンポーネント内で定義されたコンポーネントは、親子コンポーネントと呼ばれます。 1 ただし、次の点に注意してください。 1. 子コンポーネントは親コンポーネント (親コンポーネント Tempalte で記述) 内でのみ使用できます
2. デフォルトでは、子コンポーネントは親コンポーネントのデータにアクセスできません。コンポーネント インスタンス スコープは独立しています。
簡単な文で言うと、props が下にあり、event が up です。親コンポーネントは props を介して子コンポーネントにデータを渡し、子コンポーネントは にデータを送信します。イベントを介した親コンポーネント
親 息子から息子への受け渡し: Props
息子から父親への受け渡し: 息子: $emit(eventName) 親 $on(eventName) 息子を訪問する親: ref
以下は 3 つのケースの説明です。
2. 父から息子への受け渡し: 小道具 コンポーネントインスタンスのスコープは分離されています。これは、子コンポーネントのテンプレート内で親コンポーネントのデータを直接参照できない (また、参照すべきではない) ことを意味します。子コンポーネントが親コンポーネントのデータを使用できるようにするには、子コンポーネントの props オプションを使用する必要があります
。Prop を使用してデータを転送するには、まず静的 props の効果を紹介します
。 static props
:
命名規則:
props によって宣言された属性の場合、親 HTML テンプレートでは、属性名をダッシュで記述する必要があります
子 props 属性が宣言されている場合は、小さなキャメル ケースまたはダッシュを使用してください。どのような記述方法でも受け入れられます。子テンプレートが親から渡された変数を使用する場合は、対応するキャメル ケースを使用する必要があります
上記の文はどういう意味ですか?
childNode の myMessage を {{my-message}} に変更すると、実行結果が表示されます:
2. テンプレートでは、次のデータを動的にバインドする必要があります。親コンポーネントの子テンプレートへの Props は、v-bind を使用して通常の HTML 機能にバインドされます。親コンポーネントのデータが変更されると、その変更は子コンポーネントにも送信されます
var childNode = { template: '{{myMessage}}
', props: ['my-message'] } var parentNode = { template: ``, components: { 'child': childNode }, data() { return { 'data1': '111', 'data2': '222' } } };
3. 数値を渡す
初心者がよく犯す間違いは、リテラル構文を使用して値を渡すことです
結果:
これはリテラル小道具であるため、その値は数値ではなく文字列「1」になります。実際の数値を渡したい場合は、その値が JS 式として計算されるように v-bind を使用する必要があります 文字列を数値に変換するには、実際には 1 か所だけ変更する必要があります。
var parentNode = { template: `//只要把父组件my-message="1"改成:my-message="1"结果就变成number类型
`, };
もちろん、v-bind を通じて文字列型を渡したい場合はどうすればよいでしょうか?
動的プロパティを使用して、データ属性に対応する数値 1 を設定できます
var parentNode = { template: ``, components: { 'myChild': childNode }, //这里'data': 1代表就是number类型,'data': "1"那就代表String类型 data(){ return { 'data': 1 } } };
3. 子から親へ: $emit
$emit の使用法について 1. 親コンポーネントは props を使用して子コンポーネントにデータを渡すことができます。
2. サブコンポーネントは $emit を使用して親コンポーネントのカスタム イベントをトリガーできます。 子の主キー大连
親コンポーネント
//监听子组件的showCityName事件。
結果は次のようになります: toCity: Dalian
2番目のケース
{{ total }}
:
1: ボタンカウンターとして親の主キーには、親の主キーにボタン ボタンがあります。
2: メソッド this.$emit('increment1', [12, 'kkk']); では、両方のボタンがクリック イベントにバインドされており、親クラス v-on によって監視されている increment1 が呼び出されます。イベント。
3: increment1 イベントを監視すると、incrementTotal が実行されます。このとき、値が親コンポーネントに渡され、親クラスのメソッドが呼び出されます。
4: ここで、2 番目のボタンカウンターに対応する v-on:'increment2 に注目してください。その中のボタンは this.$emit('increment1', [12, 'kkk']); に対応します。 2 番目のボタンボタンは、その親の主キーに値を渡すことができません。
例: ボタンが 1 回クリックされると、それ自体とその上のボタンの両方が 1 増加しますが、2 番目のボタンはそれ自体のみ増加し、上のボタンには影響しません。
还有就是第一个按钮每点击一次,后台就会打印一次如下:
四、ref ($refs)用法
ref 有三种用法
1.ref 加在普通的元素上,用this.ref.name 获取到的是dom元素
2.ref 加在子组件上,用this.ref.name 获取到的是组件实例,可以使用组件的所有方法。
3.如何利用v-for 和ref 获取一组数组或者dom 节点
1.ref 加在普通的元素上,用this.ref.name 获取到的是dom元素
ref在外面的组件上
效果:当在p访问内点击一次:
2.ref使用在外面的元素上
ref在外面的元素上
效果:当在p访问内点击一次:
3.ref使用在里面的元素上---局部注册组件
ref在里面的元素上
效果:当在click范围内点击一次:
4.ref使用在里面的元素上---全局注册组件
效果:当我第一次输入1时,值已改变出发事件,当我第二次在输入时在触发一次事件,所以后台应该打印两次
相关推荐:
以上がVueJsコンポーネントにおける親子通信の方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。