首頁>技術>

Vue.js是一個易於使用的Web應用程式框架,可用於開發互動式前端應用程式。

在本文中,我們將更詳細地介紹Vue例項,包括如何定義它以及它的一些屬性。

Vue例項的特徵

每個Vue.js應用程式都從定義一個新的Vue例項開始。 Vue建構函式引數是一個帶有各種屬性的options物件。

我們經常使用vm來引用Vue例項,其中vm代表ViewModel。

Vue應用程式大致遵循Model-View-ViewModel模式,其中ViewModel具有應用程式的業務邏輯,View具有使用者看到的檢視,而Model具有資料。

例如,我們可以如下定義一個Vue例項:

const vm = new Vue({ });

每個Vue應用都包含一個根Vue例項,並由new Vue建立。我們可以將其整理成一棵樹,以便於維護。

資料與方法

傳遞給Vue建構函式的options物件可以具有資料和方法。

例如,如果我們如下定義Vue例項:

const vm = new Vue({  el: "#app",  data: { foo: "bar" }});

然後,我們新增程式碼:

console.log(vm.foo);

在我們的vm定義下面,由於data.foo的值為'bar',所以我們得到'bar'。

換句話說,如果我們有:

const data = { foo: "bar" };const vm = new Vue({  el: "#app",  data});console.log(vm.foo === data.foo);

然後console.log將輸出為true。

資料更改時,應用程式將使用新資料重新渲染。

如果我們在vm中建立一個新屬性並將其設定如下:

let data = { foo: "bar" };const vm = new Vue({  el: "#app",  data});vm.a = 1;

該應用不會重新渲染。而如果我們寫:

let data = { foo: "bar", a: 1 };const vm = new Vue({  el: "#app",  data});

然後,該應用將重新渲染。這意味著我們必須將要渲染的資料放入data欄位。

如果我們使用Object.freeze()凍結傳遞給data的物件,則Vue應用將不會重新渲染,因為無法更改屬性。

因此,如果我們有:

let data = { foo: "bar", a: 1 };Object.freeze(data);const vm = new Vue({  el: "#app",  data});

初始渲染後無法進行任何更改,因為我們使用Object.freeze凍結了資料。

Vue例項還公開了許多例項屬性和方法。

它們以$開頭,以便讓我們知道它們是Vue例項的一部分。

$el

我們具有$el屬性,用來獲取Vue例項所在的DOM元素。

例如,如果我們有:

let data = {foo:"bar"};const vm = new Vue({  el:"#app",  data});console.log(vm.$el === document.getElementById("app"));

然後,由於我們的Vue例項位於ID為app的元素中,所以console.log將輸出為true。

$data

$data屬性等價於傳遞給Vue建構函式的options物件中設定的data屬性的值。

因此,如果我們有:

let data = { foo: "bar" };const vm = new Vue({  el: "#app",  data});console.log(vm.$data === data);

然後,由於data與vm.$data引用相同的物件,所以console.log輸出true。

$watch

$watch是一個例項方法,可讓我們監聽options引數裡data物件中的更改。

例如,如果我們有:

src/ index.js

let data = {foo: "bar"};const vm = new Vue({  el: "#app",  data});vm.$watch("foo", (newValue,oldValue) => {  console.log(newValue, oldValue);});

src/ index.html:

<!DOCTYPE html><html>  <head>    <title>Hello</title>    <meta charset="UTF-8" />    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>  </head>    <body>    <div id="app">      <input type="text" v-model="foo" />    </div>    <script src="./src/index.js"></script>  </body></html>

然後,當我們在輸入框中輸入內容時,console.log會輸出data.foo新舊值:

vm.$watch("foo", (newValue, oldValue) => {  console.log(newValue, oldValue);});

這是因為data.foo屬性的更改在被一直監聽著。當我們在框中鍵入內容時,v-model會自動更新foo的值。

因此,當我們鍵入內容時,將監聽foo的更改,並由傳遞給$watch方法的處理函式記錄該更改。

總結

通過將具有data,el和methods屬性的options物件傳遞給Vue建構函式來建立Vue例項。它返回我們Vue應用程式的例項。

例項具有$el屬性,以獲取我們的應用程式所在的DOM元素。

此外,還有$data屬性可獲取data屬性的值,以獲取options物件中的data屬性值資料。

最後,我們有$watch方法來監聽資料中的更改。

推薦閱讀:

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 我們為什麼用gRPC取代了Kafka(Java訊息中介軟體)