vue2.x入門(mén)

參考資料

前言

最近項(xiàng)目需求,其中要做一個(gè)類似日歷的東西,正好不是很忙,就邊看vue文檔邊做。想學(xué)習(xí)vue的同學(xué),可以參考下。日歷插件

正文

Vue是一個(gè)輕量級(jí)的mvvm框架。
官方倉(cāng)庫(kù)主要有,vue、vuexvue-routervue-resource(不久的將來(lái)會(huì)停止維護(hù)),分別負(fù)責(zé)組件化開(kāi)發(fā)、狀態(tài)管理、路由控制和AJAX,我下面就簡(jiǎn)單介紹這幾個(gè)的關(guān)系。

1.vue

<div id="app">
  {{ message }}
</div>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  },
  methods:{
    init(){
    //code....
    }
}
})

以上就是一個(gè)簡(jiǎn)單的vue模版和vue實(shí)例,,el是掛載元素,data是數(shù)據(jù),vue實(shí)例只監(jiān)聽(tīng)data里的數(shù)據(jù)變化,模版內(nèi)的{{}}是界定符,會(huì)渲染data里的數(shù)據(jù)。接觸過(guò)模版引擎的同學(xué),可能見(jiàn)過(guò)類似的寫(xiě)法,比如{!! !!}、<% %>等。

1.1 編寫(xiě)組件

全局組件:

// 注冊(cè)
Vue.component('my-component', {
  template: '<div>A custom component!</div>'
})
// 創(chuàng)建根實(shí)例
new Vue({
  el: '#example'
})

局部組件:

var Child = {
  template: '<div>A custom component!</div>'
}
new Vue({
  // ...
  components: {
    // <my-component> 將只在父模板可用
    'my-component': Child
  }
})

我暫時(shí)用的是局部組件,組件的template寫(xiě)復(fù)雜的html時(shí)換行用加轉(zhuǎn)義符 \ 。

//定義組件 - 頂部組件
        var clheader = {
            template: '\
          <div class="cl-header">\
            <span class="cl-year" id="clyear" v-cloak>{{year}}年</span>\
            <ul>\
              <li>日</li><li>一</li> <li>二</li> <li>三</li><li>四</li><li>五</li><li>六</li>\
            </ul>\
          </div>\
            ',
            data(){
                return {
                    a: 1
                }
            },
            computed: {
                year: function() {
                    return this.$store.state.year;
                },
                show: function() {
                    return !this.$store.state.showfooter;
                }
            }
        };

我上面定義了一個(gè)頭部組件,主要組件的data必須要寫(xiě)成函數(shù)形式,具體使用的時(shí)候像下面這樣,是一個(gè)自定義標(biāo)簽,暫時(shí)不用在意router-view標(biāo)簽(在講router的時(shí)候會(huì)講):


<div class="cl" id="cl">
    <clheader></clheader>
        <keep-alive>
            <router-view></router-view>
        </keep-alive>
    <clfooter></clfooter>
</div>

2.vuex

當(dāng)我們編寫(xiě)很多組件的時(shí)候,組件和組件之間的通信就會(huì)變得很麻煩,這時(shí)候就需要vuex了,使用vuex來(lái)創(chuàng)建一個(gè)倉(cāng)庫(kù)。具體用法查看文檔

var store = new Vuex.Store({
     state: {
          year: 2016,
          today: {
              year: 2016,
              month: 1,
              date: 1,
              day: 1
          },
          listarr: [],
          upcount: 0, //向上翻頁(yè)次數(shù),
          showfooter: false,
          selectedDate: [] //所選擇的日期
    },
    mutations: {
        goup: function(state) {
          state.upcount++;
        }
     }
})

state里就是存儲(chǔ)原先實(shí)例和組件的data里的變量,共享的一些數(shù)據(jù)都存放在這里,組件內(nèi)可以通過(guò)調(diào)用this.$store.state.year訪問(wèn)數(shù)據(jù),組件無(wú)法直接修改store里的數(shù)據(jù),要先將store注入到實(shí)例或組件中,這樣實(shí)例或組件中,可以通過(guò)`this.$store.commit('goup',args)觸發(fā)mutations里的方法來(lái)修改公用的數(shù)據(jù),數(shù)據(jù)一旦被更改,其余組件也會(huì)相應(yīng)作出變化。

3.vue-router

單頁(yè)面應(yīng)用中最重要的一部分,可能就是路由了。
主要是兩個(gè)標(biāo)簽,router-view和router-link。router-view是一個(gè)視圖容器,router-link類似于a標(biāo)簽,用作跳轉(zhuǎn)視圖,具體用法可以查看文檔

//設(shè)置路由
var routes = [
    {
        path: '/',
        component: calendar
    }, {
        path: '/manage/:year/:month/:date',
        component: clmanage
    }
];

//路由實(shí)例
var router = new VueRouter({
    routes: routes
});

上面是我寫(xiě)的兩個(gè)路由,對(duì)應(yīng)的組件會(huì)渲染到router-view里。默認(rèn)情況下,vue-router是hash模式,訪問(wèn)時(shí)url前面會(huì)有#符號(hào)。如果你切換成html5 的histroy模式,就是一般網(wǎng)頁(yè)的url,但這需要服務(wù)器做一些配置,因?yàn)榉?wù)器會(huì)先去走后臺(tái)的路由,匹配不到就會(huì)報(bào)錯(cuò)。

4.AJAX

掌握上面的三樣,你已經(jīng)可以寫(xiě)出一個(gè)簡(jiǎn)單的SPA靜態(tài)頁(yè)面,現(xiàn)在需要靠ajax來(lái)獲取后臺(tái)傳過(guò)來(lái)的數(shù)據(jù)來(lái)生成一個(gè)動(dòng)態(tài)頁(yè)面了。

vue官方考慮到維護(hù)成本,原先推薦的vue-resource將停止維護(hù),已經(jīng)使用的還可以繼續(xù)使用?,F(xiàn)在推薦的是 axiosGit項(xiàng)目首頁(yè)),注意axios是基于ES6Promise對(duì)象設(shè)計(jì)的,所以如果你的瀏覽器不支持Promise可能需要polyfill。當(dāng)然你也可以使用jQuery的ajax,萬(wàn)能的jQuery :)。

ES6的Promise可以很好的處理異步回調(diào),通過(guò).then的鏈?zhǔn)綄?xiě)法,避免以往丑陋的倒金字塔式的遞歸回調(diào)寫(xiě)法。尤其是以下這種方法,在一些特殊的場(chǎng)景下會(huì)很驚艷。

promise.all([promise1, promise2])//將多個(gè)promise合并成一個(gè)新promise來(lái)處理
  .then(function(results){
    ...//處理結(jié)果
  })
  .catch(function(error){
    console.log(error);
  });

axios支持的請(qǐng)求如下:

  • axios.request(config)
  • axios.get(url[, config])
  • axios.delete(url[, config])
  • axios.head(url[, config])
  • axios.post(url[, data[, config]])
  • axios.put(url[, data[, config]])
  • axios.patch(url[, data[, config]])

我本人用的最多的還是get和post請(qǐng)求,如果你后端是restful風(fēng)格的接口的話,那就會(huì)用到put、delete等。

結(jié)語(yǔ)

以上就是vue“全家桶”的簡(jiǎn)單使用,希望對(duì)需要的同學(xué)有幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 作者:威威(滬江前端開(kāi)發(fā)工程師)本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明作者及出處。 背景 最近, 產(chǎn)品同學(xué)一如往常笑嘻嘻的遞來(lái)需求文...
    iKcamp閱讀 3,344評(píng)論 0 33
  • “敬這個(gè)他媽的城市!”他扔下手中的啤酒罐,跳了下去……當(dāng)他在一片白光中醒來(lái),看到的是寬敞明亮的三室一廳,而她正坐在...
    石不時(shí)放松一下閱讀 319評(píng)論 0 2
  • 最近工作越來(lái)越迷茫了,忙不到個(gè)錢(qián),也忙不出個(gè)名堂出來(lái),還是個(gè)單身,真是醉了
    下雨了收衣服閱讀 121評(píng)論 0 1
  • 水流過(guò)的地方, 帶來(lái)的是清涼, 留下的是風(fēng)景。 ……
    世說(shuō)興宇閱讀 265評(píng)論 0 2
  • 今年是我在現(xiàn)在的公司第五個(gè)年頭,從懵懵懂懂的職場(chǎng)小白到現(xiàn)在擔(dān)任部門(mén)主管,雖然事業(yè)上算不上大成就,但在職場(chǎng)中走的...
    禾苗青青閱讀 9,515評(píng)論 34 226

友情鏈接更多精彩內(nèi)容