💡インスタンス&構成部品


01.ビューインスタンス


01-1. ビューインスタンスの定義とプロパティ

  • ビューは、画面の開発に必要な基本単位
  • である.
    
    new Vue({
    	...
    });
    
  • 作成者:オブジェクトの作成時によく使用されるオプションと機能を特定のオブジェクトに予め保存し、新しいオブジェクトの作成時に既存の機能を簡単に拡張する方法
  • .

    01-2. ビューインスタンスオプションのプロパティ

  • テンプレート:画面に表示するHTML、CSSなどの寸法要素を定義するプロパティ
  • メソッド:マウスクリックイベント処理などのスクリーンロジック制御に関連するメソッドのプロパティを定義し、スクリーン全体のイベントとスクリーンアクションに関連するロジックを追加します.
  • 作成
  • :プロパティ
  • 、ビューインスタンスの作成時に実行する論理を定義する

    01-3. ビューインスタンスの有効範囲

  • el属性で指定するラベルの下の要素に限り、外部の{message}
  • を認識できません.
    
    new Vue({
    	el : '#app',
      	data :  {
        	message : 'Hello Vue.js!'
      }
    });
    
      <div id="app"></div>
      {{ message }}

    01-4. ビューインスタンスのライフサイクル

  • ライフサイクル:インスタンスのステータスに基づいて呼び出すことができるプロパティ
  • ライフサイクルフェーズ:作成->アタッチメント->更新->破棄

  • beforeCreate
    :インスタンスの作成後、最初のライフサイクルフェーズ、データ属性、metods属性が定義されておらず、ドームなどのスクリーン要素にアクセスできません.

  • created
    :論理は、データ属性とmetods属性で定義された値にアクセスして実行できますが、インスタンスがスクリーン要素にアタッチされていないため、テンプレート属性で定義されたドーム要素にアクセスできません.

  • beforeMount
    :template属性に指定した寸法属性をrender()関数に変換し、el属性で指定したスクリーン要素にインスタンスをアタッチする前に呼び出す手順.

  • mounted
    :elプロパティで指定したスクリーン要素にインスタンスがアタッチされている場合に呼び出される手順

  • beforeUpdate
    :elプロパティで指定したスクリーン要素にインスタンスをアタッチすると、インスタンスで定義したプロパティがスクリーンに切り替わります.

  • updated
    :データの変更後に画面を仮想ドームに再描画するには(データの変更が発生し、画面の再描画時に呼び出されます)

  • beforeDestroy
    :ビューインスタンスが破壊される前に呼び出されるステップで、インスタンスにアクセスできます.

  • destroy
    :ビューインスタンスが破壊された後に呼び出されるステップでは、ビューインスタンスで定義されたすべてのプロパティが削除され、サブインスタンスに宣言されたすべてのインスタンスも破壊されます.
  • 02.ビュー構成部品


    02-1. 構成部品とは

  • 複合ブロック
  • 02-2. 構成部品の登録

  • グローバル構成部品
  • Vue.component('컴포넌트 이름', {
    	// 컴포넌트 내용
    });
  • ゾーン構成部品:インスタンス構成部品の属性を追加および登録する構成部品名およびコンテンツ
  • を定義する.
    new Vue({
    	components: {
    		'컴포넌트 이름' :  컴포넌트 내용
    	}	
    });

    02-3. ゾーン構成部品とグローバル構成部品の違い

    <div id="app">
            <h3>첫 번째 인스턴스 영역</h3>
            <!-- 전역 컴포넌트 표시 -->
            <my-component></my-component> 
            <!-- 지역 컴포넌트 표시 -->
            <my-local-component></my-local-component> 
    </div>
     <hr>
    <div id="app2">
        <h3>두번째 인스턴스 영역</h3>
        <!-- 전역 컴포넌트 표시 -->
        <my-component></my-component> 
        <!-- 지역 컴포넌트 표시 -->
        <my-local-component></my-local-component> 
    </div>
    
    <script>
        //전역 컴포넌트 등록
        Vue.component('my-component' ,{
            template: '<div>전역 컴포넌트가 등록되었습니다!</div>'
        });
    
        //지역 컴포넌트 등록
        var cmp = {
            template:'<div>지역 컴포넌트가 등록되었습니다!</div>' //컴포넌트 내용
        };
    
        new Vue({
            el:'#app',
            components:{ // 지역 컴포넌트 등록
                'my-local-component': cmp
            }
        });
        new Vue({
            el:'#app2' 
        });
    </script>	
    
  • 素子は一意の有効範囲を有する、他の素子の値
  • を直接参照することはできない.
    したがって、ビューフレーム自体が定義するコンポーネントデータ伝達方法
  • に従うべきである
  • 親(親)-子(子)コンポーネント間のデータ転送方法の使用
  • 03.ビュー素子通信


    03-1. 上下部品関係

  • 要素は、各要素に独自の有効範囲があるため、他の要素の値を直接参照することはできません.したがって、ビューフレーム自体で定義された構成部品データの転送方法に従う必要があります.
  • の最も基本的なデータ転送方法は、親(親)−子(子)コンポーネント間のデータ転送方法である.

  • 03-2. 親から子へのデータの転送

  • propsプロパティ
  • 親コンポーネントから子コンポーネントにデータを転送する
    Vue.component('child-component', {
    	porps:['props 속성 이름'],
    });      
    <child-component v-bind:props 속성 이름 = "상위 컴포넌트의 data 속성"></child-component> 	      

    ☝v-bindは?


    ID、クラス、スタイルなどのHTML属性値にビューデータ値を関連付ける
  • 'v-bind:構文を「:」に簡略化できます.
  • <p v-bind:id = "idA">아이디 바인딩</p>
    <p v-bind:class = "classA">클래스 바인딩</p>
    <p v-bind:style = "styleA">스타일 바인딩</p>
    <script>
    	new Vue({
    		el: '#app',
    		data: {
    		   idA: 10,
    		   classA: 'container',
    		   styleA: 'color:blue'
    		}	
    	});
    </script> 
       <div id="app">
            <child-component v-bind:propsdata ="message"></child-component>
        </div>
    
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            Vue.component('child-component',{
                props : ['propsdata'],
                template:'<p>{{propsdata}}</p>',
            });
    
            new Vue({
                el: '#app',
    
                data:{
                    message: 'Hello Vue!'
                }
            });
        </script>

    03-3. サブコンポーネントから親コンポーネントへのイベントの転送

  • 親コンポーネントは、子コンポーネントに特定のイベントが発生するのを待機し、子コンポーネントに特定のイベントが発生すると、親コンポーネントはそのイベントを受信して親コンポーネントのメソッドを呼び出す.
  • // 이벤트 발생							      
    this.$emit('이벤트명');							      
    							      
    // 이벤트 수신
    <child-component v-on:이벤트명 = "상위 컴포넌트의 메서드명"></child-component>							      
  • $emit()を呼び出すと、カッコで定義されたイベントが発生します.
  • 呼び出し
  • $emit()の位置は、サブコンポーネントの特定のメソッドの内部である.したがって、$emit()を呼び出すときに使用されるthisは、サブコンポーネントを指します.
  • を呼び出すイベントは、登録サブコンポーネントのラベルからv:onで受信される.
  • v-on:プロパティでは、
  • サブコンポーネントで発生するイベント名を指定し、プロパティの値でイベントが発生したときに呼び出される親コンポーネントのメソッドを指定します.
  • <div id="app">
        <child-component v-on:show-log ="printText"></child-component>
    </div>
    
    <script>
        Vue.component('child-component',{
            template:'<button v-on:click="showLog">show</button>',
            methods:{
                showLog : function(){
                    this.$emit('show-log');
                }
            }
        });
    
        new Vue({
            el: '#app',
    
            methods: {
                printText: function(){
                    alert('receive an event');
                }
            }
        });
    </script>					    					   				    

    03-4. 同じレベルの構成部品間で通信


  • ビューは、上から下へデータのみを転送する基本的な通信ルールに従うため、値を隣のコンポーネントに直接渡すには、下から共通の親コンポーネントに、次に共通の親コンポーネントから2つのサブコンポーネント
  • にpropsを下へ送信する必要があります.
  • がこのように通信する必要があるのは、素子自体の有効範囲:
  • によるものである.
  • のような通信構造では、親コンポーネントは必要ありませんが、同じレベルで通信するためには、親コンポーネントを強制的に配置する必要があるため、この問題を解決するためにイベントバスがあります.
  • 03-5. 非相関コンポーネント間の通信-イベントバス


  • イベントバスは、開発者が指定した2つのコンポーネント間でデータを交換する方法です.
  • イベントバスを実装するには、アプリケーションロジックとは独立したインスタンスの新しいインスタンスを作成し、新しいインスタンスを使用してイベントを送信および受信できます.
  • .$Emit()は送信された構成部品から、.$on()は受信素子上で実現される.
  • <div id="app">
        <child-component></child-component>
    </div>
    
    <script>
        var eventBus = new Vue(); // 이벤트 버스를 위한 추가 인스턴스 1개 생성
        Vue.component('child-component', {
            template:'<div>하위 컴포넌트 영역입니다.<button v-on:click="showLog">show</button></div>',
            methods: {
                showLog: function(){
                    eventBus.$emit('triggerEventBus', 100); // 이벤트를 보내는 컴포넌트
                }
            }
        });
        var app = new Vue({
            el: '#app', 
            created: function(){
                eventBus.$on('triggerEventBus', function(value){ // 이벤트를 받는 컴포넌트
                    console.log("이벤트를 전달 받음. 전달 받은 값:" , value);
                });
            }
        });
      </script>					      					            

    doit vueを参照してください。js