vue.js基礎

使用vue,js第一步先是安裝(http://cn.vuejs.org/)
在官方文檔中就可以直接下載并用 <script>標簽引入,記住本地的Vue.js的位置,通過會被注冊為一個全局變量。如:

     <script type="text/javascript" src="D:\軟件小組/vue.js"></script>
vue介紹

vue是一套構建用戶界面的 漸進式框架,Vue.js 的目標是通過盡可能簡單的 API 實現響應的數據綁定組合的視圖組件

最基本的實現方法:

      <div id="app" >
          {{message}}        //輸出的純文本用雙大括號括著
      </div>
      <script type="text/javascript" >
        var vm=new Vue({
              el:'#app',    //元素的id
              data:{         //元素包含的數據
                  message:"good"
                  }
             })

Paste_Image.png

可以通過控制臺console改變數據
這樣的話可以多次改變數據,而通過使用 v-once 指令,你也能執行一次性地插值,當數據改變時,插值處的內容不會更新,另外一種就是在{{message}}改為{{*message}},同樣也只能賦值一次

    <div id="app" >
      {{*message}}
    </div>
    <script type="text/javascript" >
      var vm=new Vue({
      el:'#app',
      data:{
        message:"hello"
      }
  })
      vm.message="wonderful";
    </script>        //hello

如果要輸出真正的 HTML ,你需要使用v-html指令:

      <div id="app" >
        <div v-html="name"></div> //name為HTML代碼,直接可以輸出不需要雙大括號
      </div>
      <script type="text/javascript" >
          var vm=new Vue({
          el:'#app',
          data:{
          name:"Amy",
            }
        })
      </script>

注意,你不能使用 v-html來復合局部模板,因為 Vue 不是基于字符串的模板引擎。組件更適合擔任 UI 重用與復合的基本單元。

你的站點上動態渲染的任意 HTML 可能會非常危險,因為它很容易導致 XSS 攻擊。請只對可信內容使用 HTML 插值,絕不要對用戶提供的內容插值。*

條件與循環
    <div id="app" >
        <p v-if="look">{{message}}       //v-if 語句的形式,通過look的布爾值決定是否執行
        </p>
    </div>
    <script type="text/javascript" >
        var vm=new Vue({
        el:'#app',
        data:{
          message:"good",
          look:true
              }
        })         //good

在通過控制臺輸出vm.look=false使得good的輸出消失

循環:

    <div id="app" >
        <div v-if="look" >
          <p v-for="item in items">{{item.message}}     相當于 i in array的循環
          </p>
      </div>
    </div>
    <script type="text/javascript" >
      var vm=new Vue({
      el:'#app',
      data:{
         items:[               //數組和對象的要小心這些括號
              {message:"good"},
             {message:"study"},
             {message:"children"}
                  ],
        look:true
            }
         })

    </script>

Paste_Image.png

還可以在控制臺上增添新的message

     vm.items.push({message:"better"})   
Paste_Image.png
事件

v-on事件

     <div id="app" >
        <button v-on:click="hello">Hello</button>   v-on進行連接click點擊函數
    </div>
    <script type="text/javascript" >
      var vm=new Vue({
       el:'#app',
      methods:{            //方法
       hello:function() {
         alert("hey,girl");
                        }
               }
        })

    </script>
Paste_Image.png


<a v-on:click="doSomething"></a>

<a @click="doSomething"></a>

Vue 也提供了 v-model 指令,它使得在表單輸入和應用狀態中做雙向數據綁定變得非常輕巧。如:

    <div id="app" >
        {{message}}
        {{name}}
        <br>
        <input v-model="name">
    </div>
    <script type="text/javascript" >
        var vm=new Vue({
        el:'#app',
        data:{
          message:"hello",
          name:''
        }
      })
      </script>
Paste_Image.png

v-bind指令綁定class

    <style type="text/css">
      .active{
          color:red;
        }
      .static{
          background:green;
        }
    </style>
    <div id="app" v-bind:class="{active:isActive,static:isStatic}">
        {{message}}
    </div>
    <script type="text/javascript" >
        var vm=new Vue({
               el:'#app',
               data:{
                   isActive:true,
                   message:'beauty',
                   isStatic:true
                 },  
        })//class屬性的bind的

Paste_Image.png

//綁定Style屬性

    <style type="text/css">
      .active{
      font-family:'Comic Sans Ms';
      background:blue;
      }  
  </style>
    <div id="app">
        <div v-bind:class="{active:isActive}">
            <div v-bind:style="{color:activeColor,fontSize:fontSize}">
            {{message}}
            </div>
        </div>
    </div>
<script type="text/javascript" >

  var vm=new Vue({
       el:'#app',
       data:{
       activeColor:'orange',
       message:"dodo",
       isActive:true,
       fontSize:'50',
     }
})

Paste_Image.png

//如果是想同時綁定兩個東西,應該要多個包裝,否則就會沒有什么效果直接忽略后面的綁定,例如不能在同一個div中用bind綁定兩個
bind語法

<a v-bind:href="url"></a>

<a :href="url"></a>

計算屬性

在模板中綁定表達式是非常便利的,但是它們實際上只用于簡單的操作。在模板中放入太多的邏輯會讓模板過重且難以維護。如:
<div id="example">
{{ message.split('').reverse().join('') }}
</div>

computed例子:

 <div id="app">
   <p>{{message}}</p>
   <p>{{reverseMessage}}</p>
 </div>
<script type="text/javascript" >
    var vm=new Vue({
       el:'#app',
       data:{
       message:'live'

       },
       computed:{
       reverseMessage:function() {
       return this.message.split('').reverse().join('')
       }
       }
    })          

結果:
live
evil
這個目的同樣可以用methods的形式實現,但是對于methods,是每次執行都會重新調用一次函數,再從頭開始,而對于計算屬性來說,是基于它的依賴緩存,也就是說只要message的值不變,計算屬性會一下子就出現之前出現的結果,而method又要經過冗長的過程

Vue.js 提供了一個方法 $watch ,它用于觀察 Vue 實例上的數據變動

    computed: {
      classObject:function() {
        return {
            active:this.isActive && !this.error,
            'text-danger':this.error && this.error.type==='fatal',    //這是什么意思
            }
        }
    }
v-if條件渲染
    <div id="app">
    <div v-if="ok">{{message}}</div>
    </div>
    <script type="text/javascript" >
        var vm=new Vue({
         el:'#app',
         data:{
             message:"dodo",
             ok:true
         }
    })
  </script>   //注意的是v-if不能直接寫在根元素上 
template方法

<template>元素當做包裝元素,并在上面使用 v-if,可以用來切換多個元素

    <div id="app" > 
      <template v-if="ok">
        <div  v-bind:style="{color:activeColor}">
          <h1>Title</h1>
          <p>Paragraph</p>
        </div>
      </template>
      {{message}}
     </div>
  <script type="text/javascript" >
      var vm=new Vue({
           el:'#app',
           data:{
           activeColor:'orange',
           message:"dodo",
           ok:true
         }
    })
  </script>
Paste_Image.png

可以用 v-else指令給 v-if 或 v-show添加一個 “else” 塊:
v-else元素必須緊跟在 v-if或 v-show 元素的后面——否則它不能被識別

  <div id="app" > 
    <template v-else>
        {{message}}
    </template>
  </div>
  <script type="text/javascript" >
      var vm=new Vue({
           el:'#app',
           data:{
               activeColor:'orange',
               message:"dodo",
               ok:true
           }
      })           //無效果

v-show另一個根據條件展示元素的選項是 v-show 指令
用法大體上一樣:

 <h1 v-show="ok">Hello!</h1>

與v-if不同的是有 v-show的元素會始終渲染并保持在 DOM 中。v-show
是簡單的切換元素的 CSS 屬性 display

注意: v-show不支持 <template>語法,但是不會報錯。

template v-for句式

    <div id="app" > 
      <ul>
         <template v-for="item in items">
             <li>{{item.message}}</li>
             <li v-bind:class="{active:isActive}"></li>
        </template>
      </ul>
    </div>
  <script type="text/javascript" >
        var vm=new Vue({
            el:'#app',
             data:{
                 isActive:true,
                 activeColor:'orange',
                 items:[
                    {message:"dodo"},
                    {message:"foolish"}
                   ]
               }
          })
    </script>             
Paste_Image.png

列表渲染

      <style type="text/css">
        .active{
             font-family:'Comic Sans Ms';
             background:blue;
        }
      </style>
    <div id="app" > 
        <ul>
             <template v-for="(value,key) in items">    //遍歷
                 <li v-bind:class="{active:isActive}">      //綁定class
                   {{$index}}.{{key}}:{{value}}</li>        //輸出值
             </template>
        </ul>
      </div>
  <script type="text/javascript" >
       var vm=new Vue({
          el:'#app',
          data:{
             isActive:true,
             activeColor:'orange',
             items:{
                  wonder:"dodo",
                  message:"foolish"
                 }
             }
         })  
</script>
Paste_Image.png
    <div id="app" v-for="item in items">
        {{item.message}}
    </div>
    <script type="text/javascript" >
          var vm=new Vue({
              el:'#app',
              data:{
              items:[{message:"baby"}]
              }
          })
      </script>

結果:
baby
在控制臺輸入

    vm.items.push({message:"good"})
Paste_Image.png

再輸入

    vm.items.pop()

輸出:


Paste_Image.png

數組的變異方法手段還有

  • push()
  • pop()
  • shift() //從頭部開始刪除元素
  • unshift() //從頭部開始增加元素
  • splice()
  • sort()
  • reverse()

#########注意

由于 JavaScript 的限制, Vue 不能檢測以下變動的數組:

  • 當你直接設置一個項的索引時,例如:
    vm.items[indexOfItem] = newValue
  • 當你修改數組的長度時,例如:
    vm.items.length = newLength

解決第一個問題的方法:

// Vue.set
Vue.set(example1.items, indexOfItem, newValue)

// Array.prototype.splice`
example1.items.splice(indexOfItem, 1, newValue)

    var vm=new Vue({
          el:'#app',
          data:{
            items:[{message:"baby"},
                   {message:"hello"},
                   {message:"good morning"}
                  ]
              }
        })
    vm.items.splice(2,1,{message:'beauty'})  //改變數組中特定位置元素的值
Paste_Image.png

解決第二個問題的方法:

example1.items.splice(newLength)

對于所有的數據綁定, Vue.js 都提供了完全的 JavaScript 表達式支持。然而這些表達式會在所屬 Vue 實例的數據作用域下作為 JavaScript 被解析。有個限制就是,每個綁定都只能包含單個表達式,語句不會解析

    {{number+1}}    <!--把語句包含在雙大括號內--!>

    <!-- 這是語句,不是表達式 -->
    {{ var a = 1 }}

    <!-- 流控制也不會生效,請使用三元表達式 -->
    {{ if (ok) { return message } }}
事件修飾符

通過由點(.)表示的指令后綴來調用修飾符,處理 DOM 事件細節

  • stop
  • self
  • prevent
  • capture

  • <a v-on:click.stop="doThis"></a>

  • <form v-on:submit.prevent="onSubmit"></form>

  • <a v-on:click.stop.prevent="doThat"></a>

  • <form v-on:submit.prevent></form>

  • <div v-on:click.capture="doThis">...</div>

  • <div v-on:click.self="doThat">...</div>

#######按鍵修飾符
最常用例子:

    <input v-on:keyup.enter="submit">//用回車鍵進行操作提交

其他的常用鍵

  • enter
  • tab
  • delete
  • esc
  • space
  • up
  • down
  • left
  • right
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容