Vue.js 2.0記錄01

Vue.js(讀音 /vju?/, 類似于 view) 是一套構(gòu)建用戶界面的 漸進式框架券犁。與其他重量級框架不同的是,Vue 采用自底向上增量開發(fā)的設(shè)計殿较。Vue 的核心庫只關(guān)注視圖層舌狗,并且非常容易學(xué)習,非常容易與其它庫或已有項目整合咐柜。另一方面,Vue 完全有能力驅(qū)動采用單文件組件Vue生態(tài)系統(tǒng)支持的庫開發(fā)的復(fù)雜單頁應(yīng)用。

** Vue.js 的目標是通過盡可能簡單的 API 實現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件犁罩。 **

參考鏈接:
Vue.js
Vue.js文檔
Vue.js github


初探Vue.js (我的備忘錄)

My todos
  • 普通版本
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vuejs2.0</title>
    <link  rel="stylesheet">
    <!-- 引入Vue.js -->
    <script src="http://cdn.bootcss.com/vue/2.0.0/vue.min.js"></script>
    <style>
        <!-- 完成狀態(tài)樣式 -->
        .completed{
            color:green;
            text-decoration: line-through;
        }
    </style>
</head>
<body>
    <div class="container" id="app">
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <div class="panel panel-default">
                    <div class="panel-heading">Welcome Vue js</div>
                    <div class="panel-body">
                        <!-- 備忘錄條目個數(shù) -->
                        <h1>My todos {{todos.length}} </h1>
                        <ul class="list-group">
                            <!-- 遍歷備忘錄條目 -->
                            <li class="list-group-item" v-bind:class="{ 'completed' : todo.completed }" v-for="(todo, index) in todos">
                                {{todo.title}}
                                <button class="btn btn-xs pull-right btn-warning"  v-on:click="deleteTodo(index)">Delete</button>
                                <button class="btn btn-xs pull-right" v-on:click="toggleCompletion(todo)" v-bind:class="[todo.completed ? 'btn-danger' : 'btn-success' ]">{{ todo.completed ? 'undo' : 'completed' }}</button>
                            </li>
                        </ul>
                      
                        <!-- 添加備忘錄條目 -->
                        <form v-on:submit.prevent="addTodo(newTodo)">
                            <div class="form-group">
                                <input type="text"
                                       v-model="newTodo.title"
                                       class="form-control"
                                       placeholder="Add a new todo"
                                />
                            </div>
                            <div class="from-group">
                                <button class="btn btn-success" type="submit">Add Todo</button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>
<script>
    <!-- 實例化Vue應(yīng)用 -->
    new Vue({
        el: "#app",
        data: {
            message: "Hello World!",
            todos: [
                {id:1, title:"learn Vuejs", completed: false}
            ],
            newTodo: {id:null,title:"", completed: false}
        },
        computed: {
            todoCount() {
                return this.todos.length;
            }
        },
        methods: {
            addTodo(newTodo) {
                this.todos.push(newTodo);
                this.newTodo = {id:null,title:"", completed: false}
            },
            deleteTodo(index) {
                // this.todos.$remove(todo)
                this.todos.splice(index, 1)
            },
            toggleCompletion(todo){
                todo.completed = !todo.completed
            }
        }
    })
</script>
  • 普通組件版本
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vuejs2</title>
    <link  rel="stylesheet">
    <script src="http://cdn.bootcss.com/vue/2.0.0/vue.min.js"></script>
    <style>
        <!-- 完成狀態(tài)樣式 -->
        .completed{
            color:green;
            text-decoration: line-through;
        }
    </style>
</head>
<body>
<div class="container" id="app">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Welcome Vue js 2.0</div>
                <div class="panel-body">
                    <!-- 備忘錄條目個數(shù) -->
                    <h1>My todos {{todoCount}}</h1>
                    
                    <!-- 備忘錄條目組件 -->
                    <todo-items :todos="todos"></todo-items>

                    <!--
                    # 等同
                    <todo-items v-bind:todos="todos"></todo-items>
                    -->
                  
                    <!-- 添加備忘錄條目組件 -->
                    <todo-form :todos="todos"></todo-form>

                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

<!-- 備忘錄條目組件模板 -->
<script type="text/x-template" id="todo-items-template">
    <ul class="list-group">
        <li class="list-group-item" v-bind:class="{ 'completed' : todo.completed }" v-for="(todo, index) in todos">
            {{todo.title}}
            <button class="btn btn-xs pull-right btn-warning"  v-on:click="deleteTodo(index)">Delete</button>
            <button class="btn btn-xs pull-right" v-on:click="toggleCompletion(todo)" v-bind:class="[todo.completed ? 'btn-danger' : 'btn-success' ]">{{ todo.completed ? 'undo' : 'completed' }}</button>
        </li>
    </ul>
</script>

<!-- 添加備忘錄條目組件模板 -->
<script type="text/x-template" id="todo-add-form-template">
    <form v-on:submit.prevent="addTodo(newTodo)">
            <div class="form-group">
            <input type="text"
    v-model="newTodo.title"
    class="form-control"
    placeholder="Add a new todo"
            />
            </div>
            <div class="from-group">
            <button class="btn btn-success" type="submit">Add Todo</button>
            </div>
    </form>
</script>
<script>
    <!-- 備忘錄條目組件 -->
    Vue.component('todo-items', {
        template: "#todo-items-template",
        props: ['todos'],
        methods: {
            deleteTodo(index) {
                // this.todos.$remove(todo)
                this.todos.splice(index, 1)
            },
            toggleCompletion(todo){
                todo.completed = !todo.completed
            }
        }
    })

    <!-- 添加備忘錄條目組件 -->
    Vue.component('todo-form', {
        template: "#todo-add-form-template",
        data() {
            return {
                newTodo: {id:null,title:"", completed: false}
            }
        },
        props: ['todos'],
        methods: {
            addTodo(newTodo) {
                this.todos.push(newTodo);
                this.newTodo = {id:null,title:"", completed: false}
            }
        }
    })
    
    <!-- 實例化Vue應(yīng)用 -->
    new Vue({
        el: "#app",
        data: {
            todos: [
                {id:1, title:"learn Vuejs", completed: false}
            ]
        },
        computed: {
            todoCount() {
                return this.todos.length;
            }
        }
    })
</script>

  • vue-cli版本

1、安裝vue-cli土陪、初始化項目

vue-cli
<code>npm install -g vue-cli //安裝vue-cli</code>
<code>vue init webpack project //vue初始化項目</code>
<code>cd project //進入項目目錄</code>
<code>npm install //安裝依賴包</code>

<code>npm run dev //開啟服務(wù)器</code>

2昼汗、主要模塊源碼

# project/index.html #主頁面文件
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>project</title>
    <link  rel="stylesheet">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>
# project/src/components/Todos.vue //備忘錄條目模塊
<template>
  <ul class="list-group">
    <li class="list-group-item" v-bind:class="{ 'completed' : todo.completed }" v-for="(todo, index) in todos">
      {{todo.title}}
      <button class="btn btn-xs pull-right btn-warning"  v-on:click="deleteTodo(index)">Delete</button>
      <button class="btn btn-xs pull-right" v-on:click="toggleCompletion(todo)" v-bind:class="[todo.completed ? 'btn-danger' : 'btn-success' ]">{{ todo.completed ? 'undo' : 'completed' }}</button>
    </li>
  </ul>
</template>

<script>
export default {
  props: ['todos'],
  methods: {
      deleteTodo(index) {
          // this.todos.$remove(todo)
          this.todos.splice(index, 1)
      },
      toggleCompletion(todo){
          todo.completed = !todo.completed
      }
  }
}
</script>
# project/src/components/TodoForm.vue 添加備忘錄模塊

<template>
  <form v-on:submit.prevent="addTodo(newTodo)">
    <div class="form-group">
      <input type="text"
             v-model="newTodo.title"
             class="form-control"
             placeholder="Add a new todo"
      />
    </div>
    <div class="from-group">
      <button class="btn btn-success" type="submit">Add Todo</button>
    </div>
  </form>
</template>

<script>
export default {
  data() {
      return {
          newTodo: {id:null,title:"", completed: false}
      }
  },
  props: ['todos'],
  methods: {
      addTodo(newTodo) {
          this.todos.push(newTodo);
          this.newTodo = {id:null,title:"", completed: false}
      }
  }
}
</script>
# project/src/App.vue 主模塊

<template>
  <div id="app">
    <div class="row">
      <div class="col-md-8 col-md-offset-2">
        <div class="panel panel-default">
          <div class="panel-heading">Welcome Vue js 2.0</div>
          <div class="panel-body">
            <h1>My todos {{todoCount}}</h1>

            <todos :todos="todos"></todos>
            <todo-form :todos="todos"></todo-form>

          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import Todos from './components/Todos.vue'
import TodoForm from './components/TodoForm.vue'

export default {
  name: 'app',
  data() {
      return {
      todos: [
          {id:1, title:"learn Vuejs", completed: false}
      ]
  }
  },
  computed: {
      todoCount() {
          return this.todos.length;
      }
  },
  components: {
    Todos,
    TodoForm
  }
}
</script>

<style>
.completed{
    color:green;
    text-decoration: line-through;
}
</style>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鬼雀,隨后出現(xiàn)的幾起案子顷窒,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋吉,死亡現(xiàn)場離奇詭異鸦做,居然都是意外死亡,警方通過查閱死者的電腦和手機谓着,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門泼诱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赊锚,你說我怎么就攤上這事治筒。” “怎么了舷蒲?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵耸袜,是天一觀的道長。 經(jīng)常有香客問我牲平,道長堤框,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任纵柿,我火速辦了婚禮蜈抓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昂儒。我一直安慰自己沟使,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布荆忍。 她就那樣靜靜地躺著格带,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刹枉。 梳的紋絲不亂的頭發(fā)上叽唱,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音微宝,去河邊找鬼棺亭。 笑死,一個胖子當著我的面吹牛蟋软,可吹牛的內(nèi)容都是我干的镶摘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼岳守,長吁一口氣:“原來是場噩夢啊……” “哼凄敢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起湿痢,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涝缝,失蹤者是張志新(化名)和其女友劉穎扑庞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拒逮,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡罐氨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了滩援。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栅隐。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖玩徊,靈堂內(nèi)的尸體忽然破棺而出租悄,到底是詐尸還是另有隱情,我是刑警寧澤佣赖,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布恰矩,位于F島的核電站,受9級特大地震影響憎蛤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纪吮,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一俩檬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碾盟,春花似錦棚辽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至熙尉,卻和暖如春联逻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背检痰。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工包归, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铅歼。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓公壤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親椎椰。 傳聞我的和親對象是個殘疾皇子厦幅,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容