vue03

vue03

vue過渡

  • 自帶

    <div id="div1" v-show="bSign" transition="fade"></div>

    動畫:
    .fade-transition{
    transition: 1s all ease;
    }
    進入:
    .fade-enter{
    opacity: 0;
    }
    離開:
    .fade-leave{
    opacity: 0;
    transform: translateX(200px);
    }

  • animate.css

      引入animate.css (接著用上面標簽)然后在標簽里加上class='animated',然后設置vue里的transtions屬性
                  transitions:{ //定義所有動畫名稱
                      fade:{
                          enterClass:'zoomInLeft',(animate.css的類)
                          leaveClass:'zoomOutRight'
                      }
                  }
    

vue組件

全局組件

    var Aaa=Vue.extend({
        template:'<h3>我是標題3</h3>'
    });
    Vue.component('aaa',Aaa);
        *組件里面放數據:
            data必須是函數的形式,函數必須返回一個對象(json)
            var Aaa=Vue.extend({
                data(){
                    return {
                        msg:'我是標題^^'
                    };
                },
                template:'<h3>{{msg}}</h3>'
            });
            Vue.component('aaa',Aaa);  

局部組件

    var vm=new Vue({
        el:'#box',
        data:{
            bSign:true
        },
        components:{ //局部組件
            aaa:Aaa
        }
    });
    --------------------------------------
    另一種編寫方式:
        Vue.component('my-aaa',{
            template:'<strong>好</strong>'
        });(全局)
    
        var vm=new Vue({
            el:'#box',
            components:{
                'my-aaa':{
                    template:'<h2>標題2</h2>'
                }
            }
        });(局部)

配合模版

1. template:'<h2 @click="change">標題2->{{msg}}</h2>'

2. 單獨放到某個地方
    a). <script type="x-template" id="aaa">
        <h2 @click="change">標題2->{{msg}}</h2>
    </script>
    js里邊:template:'#aaa'

    b). <template id="aaa">
        <h1>標題1</h1>
        <ul>
            <li v-for="val in arr">
                {{val}}
            </li>
        </ul>
    </template>

動態組件

<component :is="組件名稱"></component>

組件數據傳遞

  • 子組件就想獲取父組件data

      在調用子組件:
          父組件模版里給子組件綁定個屬性<bbb :mmm="數據"></bbb>
    
      父組件的components:{
          子組件'bbb':{
                  props:['mmm'],
                  template:'<h3>我是bbb組件->{{mmm}}</h3>'
                  }
              }
    

props兩種參數:

    props:['m','myMsg']
    props:{
        'm':String,
        'myMsg':Number
    }
  • 父級獲取子級數據
    子組件methods里定義方法,方法內部this.$emit('child-msg',this.a),父組件的模版中綁定傳遞的時間名@child-msg=父組件的一個方法,該方法接收一個參數,即為子組件傳過來的參數
  <template id="aaa">
        <span>我是父級 -> {{msg}}</span>
        <bbb @child-msg="get"></bbb>
    </template>
    <template id="bbb">
        <h3>子組件-</h3>
        <input type="button" value="send" @click="send">
  </template>
    var vm=new Vue({
        el:'#box',
        data:{
            a:'aaa'
        },
        components:{
            'aaa':{
                data(){
                    return {
                        msg:111,
                        msg2:'我是父組件的數據',
                    }
                },
                template:'#aaa',
                methods:{
                    get(msg){
                        // alert(msg);
                        this.msg=msg;
                    }
                },
                components:{
                    'bbb':{
                        data(){
                            return {
                                a:'我是子組件的數據'
                            }
                        },
                        template:'#bbb',
                        methods:{
                            send(){
                                this.$emit('child-msg',this.a);
                            }
                        }
                    }
                }
            }
        }
    });

vm.$dispatch(事件名,數據) 子級向父級發送數據
vm.$broadcast(事件名,數據) 父級向子級廣播數據
配合: event:{}

在vue2.0里面已經,報廢了

插槽slot

類似ng里面 transclude (指令)
給模版中slot標簽添加屬性name='slotname',
然后在dom里的模版里添加屬性slot='slotname'
就可以插入到對應位置了

    <aaa>
        <ul slot="ul-slot">
            <li>1111</li>
            <li>2222</li>
            <li>3333</li>
        </ul>
        <ol slot="ol-slot">
            <li>111</li>
            <li>222</li>
            <li>333</li>
        </ol>
    </aaa>
<template id="aaa">
    <h1>xxxx</h1>
    <slot name="ol-slot">這是默認的情況</slot>
    <p>welcome vue</p>
    <slot name="ul-slot">這是默認的情況2</slot>
</template>
    var vm=new Vue({
        el:'#box',
        data:{
            a:'aaa'
        },
        components:{
            'aaa':{
                template:'#aaa'
            }
        }
    });

viewrouter 0.7.13+vue1.0

<div id="box">
    <ul>
        <li>
            <a v-link="{path:'/home'}">主頁</a>
        </li>
        <li>
            <a v-link="{path:'/news'}">新聞</a>
        </li>
    </ul>
    <div>
        <router-view></router-view>
    </div>  
</div>
    //1. 準備一個根組件
    var App=Vue.extend();
    //2. Home News組件都準備
    var Home=Vue.extend({
        template:'<h3>我是主頁</h3>'
    });
    var News=Vue.extend({
        template:'<h3>我是新聞</h3>'
    });
    //3. 準備路由
    var router=new VueRouter();
    //4. 關聯
    router.map({
        'home':{
            component:Home
        },
        'news':{
            component:News
        }
    });
    //5. 啟動路由
    router.start(App,'#box');
    //6. 跳轉
    router.redirect({
        '/':'home'
    });
  • 多層路由

      <div id="box">
          <ul>
              <li>
                  <a v-link="{path:'/home'}">主頁</a>
              </li>
              <li>
                  <a v-link="{path:'/news'}">新聞</a>
              </li>
          </ul>
          <div>
              <router-view></router-view>
          </div>  
      </div>
      <template id="home">
          <h3>我是主頁</h3>
          <div>
              <a v-link="{path:'/home/login'}">登錄</a>
              <a v-link="{path:'/home/reg'}">注冊</a>
          </div>
          <div>
              <router-view></router-view>
          </div>
      </template>
      <template id="news">
          <h3>我是新聞</h3>
          <div>
              <a v-link="{path:'/news/detail/001'}">新聞001</a>
              <a v-link="{path:'/news/detail/002'}">新聞002</a>
          </div>
          <router-view></router-view>
      </template>
      <template id="detail">
          {{$route.params | json}}
          <br>
          {{$route.path}}
          <br>
          {{$route.query | json}}
      </template>
    
      //1. 準備一個根組件
      var App=Vue.extend();
      //2. Home News組件都準備
      var Home=Vue.extend({
          template:'#home'
      });
      var News=Vue.extend({
          template:'#news'
      });
      var Detail=Vue.extend({
          template:'#detail'
      });
      //3. 準備路由
      var router=new VueRouter();
      //4. 關聯
      router.map({
          'home':{
              component:Home,
              subRoutes:{
                  'login':{
                      component:{
                          template:'<strong>我是登錄信息</strong>'
                      }
                  },
                  'reg':{
                      component:{
                          template:'<strong>我是注冊信息</strong>'
                      }
                  }
              }
          },
          'news':{
              component:News,
              subRoutes:{
                  '/detail/:id':{
                      component:Detail
                  }
              }
          }
      });
      //5. 啟動路由
      router.start(App,'#box');
      //6. 跳轉
      router.redirect({
          '/':'home'
      });
    

擴展

vue-loader:
其他loader -> css-loader、url-loader、html-loader.....

后臺: nodeJs  ->  require  exports
broserify  模塊加載,只能加載js
webpack   模塊加載器, 一切東西都是模塊, 最后打包到一塊了

require('style.css');   ->   css-loader、style-loader


vue-loader基于webpack

.css
.js
.html
.php
.....

a.vue
b.vue

.vue文件:
    放置的是vue組件代碼

    <template>
        html
    </template>

    <style>
        css
    </style>

    <script>
        js  (平時代碼、ES6)  babel-loader
    </script>

簡單的目錄結構:
|-index.html
|-main.js 入口文件
|-App.vue vue文件,官方推薦命名法
|-package.json 工程文件(項目依賴、名稱、配置)
npm init --yes 生成
|-webpack.config.js webpack配置文件

ES6: 模塊化開發
導出模塊:
export default {}
引入模塊:
import 模塊名 from 地址

webpak準備工作:
cnpm install webpack --save-dev
cnpm install webpack-dev-server --save-dev

App.vue -> 變成正常代碼       vue-loader@8.5.4
cnpm install vue-loader@8.5.4 --save-dev

cnpm install vue-html-loader --save-dev

vue-html-loader、css-loader、vue-style-loader、
vue-hot-reload-api@1.3.2

babel-loader
babel-core
babel-plugin-transform-runtime
babel-preset-es2015
babel-runtime
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內容

  • 基本格式 以json的形式、將數據(支持所有格式)掛載在vue的data上、方法掛載在vue的methods上。 ...
    kirito_song閱讀 782評論 0 21
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,230評論 0 6
  • 333 到了2.0以后,有哪些變化? 1.在每個組件模板,不在支持片段代碼組件中模板:之前:<template> ...
    magic_pill閱讀 266評論 0 0
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內容,還有我對于 Vue 1.0 印象不深的內容。關于...
    云之外閱讀 5,064評論 0 29
  • 上一章 在建房子之前,我有必要提一下的是,徐福一開始只想建一個簡單的房子,能夠為他和女刺客以后所生出的孩子所居住就...
    島主王仙客閱讀 267評論 0 1