摘要:在這個組件里面有一些鏈接列表,和,這些列表直接使用編寫按照傳統的寫法,如果我們需要往里面添加鏈接的時候,每次我們都得添加和標簽。所以修改如下這樣我們就把數據和視圖分開了,模板里面的代碼也簡潔了很多,不再需要寫很多重復的代碼。
Vue 的官方文檔 對 Vue 介紹非常詳細,但官方文檔使用在 HTML 中引入 vue 的方式進行講解,而實際項目中一般使用腳手架如 vue-cli 初始化項目。以至于剛看完文檔時,卻依舊不能立即立即 vue-cli 創建的項目代碼。所以本文 vue-cli 構建的項目為基礎,詳細解釋其代碼及對應的概念,并進行簡單的實踐。
命令行工具 安裝 vue-cli 并初始化項目本文的代碼在 https://github.com/nodejh/vue2-tutorials/tree/master/01.QuickStart
首先要全局安裝 vue-cl:
$ npm install --global vue-cli
然后使用 vue-cli 初始化一個基于 webpack 模板的新項目,除了 Install vue-router? 選 N (No),其余都可以直接回車選 Y (Yes),因為我們暫時不會講到 vue-router:
$ vue init webpack demo ? Project name demo ? Project description A Vue.js project ? Author nodejh安裝依賴? Vue build standalone ? Install vue-router? No ? Use ESLint to lint your code? Yes ? Pick an ESLint preset Standard ? Setup unit tests with Karma + Mocha? Yes ? Setup e2e tests with Nightwatch? Yes
$ cd demo $ npm install $ npm run dev
然后打開瀏覽器,輸入 http://localhost:8080 就能看到界面。
接下來分析一下代碼。
代碼分析項目目錄結構如下:
├── README.md ├── build # 編譯項目的配置文件目錄 ├── config # 配置文件目錄 ├── src # 項目主要代碼目錄 ├── static # 靜態資源 ├── test # 測試文件目錄
開發階段的主要代碼都在 src 目錄中編寫,vue-cli 默認生成了一些代碼:
src ├── App.vue ├── assets │?? └── logo.png ├── components │?? └── Hello.vue └── main.js
可以發現,代碼的后綴名有兩種:
.js JS 文件
.vue Vue 組件,里面定義了 Vue 實例、模板、樣式等。需要由 webpack 等工具來轉換為 js 代碼
接下來會逐一解釋這些文件及代碼。
main.jsmain.js 是項目的入口文件,也是 webpack 打包的入口文件。里面最代碼很少,主要就是通過 new Vue() 創建 Vue 實例:
new Vue({ el: "#app", template: "", components: { App }, });
每個 Vue.js 應用都是通過構造函數 Vue 創建一個 Vue 的根實例啟動的。
在實例化 Vue 時,傳入一個了一個對象,對象包含以下幾個選項。
elel 的值是 Vue 實例的掛載目標,這里是 #app,也就是 demo/index.html 中 id="app" 這個元素:
el 必須是一個已存在的元素。
api/#el
components在說 template 之前,先來看看 components 屬性。
components: { App } 等價于 components: { App: App },是一個包含了對 Vue 實例可見的組件的哈希表。只有在 components 里面列出來的組件,才可以在 template 里面使用。
如果我們把 components: { App } 改為 components: { App } 改為 components: { MyApp: App },那么在 template 里面就需要這樣使用:template: "
由于 HTML 標簽不區分大小寫,所以 components 里面的駝峰命名會自動轉換為短橫線。詳見 camelCase vs. kebab-case
templatetemplate 就是掛載到頁面的模板。
這里的值是
new Vue({ el: "#app", // 這里的就是 components 屬性的值 App template: " ", components: { App }, });
所以這段代碼的含義就是,將
src/App.vue 是一個典型的單文件組件。實際在項目中,我們寫的基本都是組件,再根據需要用組件組成頁面,這其實就是組件化。組件與組件之間相互獨立,項目結構更加清晰,也更有利于維護。
一個組件里面封裝了 HTML、CSS 和 JS,有自己獨立的樣式和邏輯。
就是組件中的模板,模板的代碼都在 標簽中,除
為什么模板中能使用 hello 這個組件呢?
這是因為 標簽里面定義了 Hello(首字母大寫)這個組件:
import Hello from "./components/Hello" export default { name: "app", components: { // Hello 組件,即 ./components/Hello 的一個引用 Hello } }
這里 components 屬性的含義,在之前已經提到過了,只有在 components 里面列出來的組件,才能被模板使用。這里列出了 Hello 這個組件,所以在 中我們可以使用
而 components 屬性里面的 Hello,則是 ./components/Hello 這個組件的一個引用:
import Hello from "./components/Hello"
最后就是 標簽,里面就是普通的 CSS 了。
src/components/Hello.vue最后再來看看 src/components/Hello.vue 這個組件的代碼。
基本跟 src/App.vue 是一樣的,除了下面這兩個地方之外:
{{ msg }}
data () { return { msg: "Welcome to Your Vue.js App" } }
恭喜你!看到這里,我們就可以真正開始寫代碼了。
{{}} 是 Vue 的一個模板語法,文本插值。如上面的例子所示,我們在 data 里面定義一個對象,就可以在模板中通過 {{ }} 來訪問。
data 雖然是一個函數,但它執行之后就等價于:
data: { msg: "Welcome to Your Vue.js App" }
當我們改變 msg 的值,在頁面上渲染出來的數據也會改變。也就是數據和 DOM 綁定在了一起。
模板語法 插值 文本插值上面我們已經接觸到了文本插值 {{}},{{ msg }} 將會被替代為對應數據對象上 msg 屬性的值。無論何時,綁定的數據對象(即 data)上 msg 屬性發生了改變,插值處的內容都會更新。
通過使用 v-once 指令,我們也能執行一次性地插值,當數據改變時,插值處的內容不會更新。但請留心這會影響到該節點上所有的數據綁定:
純 HTMLThis will never change: {{ msg }}
雙大括號會將數據解釋為純文本,而非 HTML 。為了輸出真正的 HTML ,需要使用 v-html 指令:
這個 div 的內容將會被替換成為屬性值 rawHtml,直接作為 HTML —— 數據綁定會被忽略。注意,你不能使用 v-html 來復合局部模板,因為 Vue 不是基于字符串的模板引擎。組件更適合擔任 UI 重用與復合的基本單元。
JS 表達式你的站點上動態渲染的任意 HTML 可能會非常危險,因為它很容易導致 XSS 攻擊。請只對可信內容使用 HTML 插值,絕不要對用戶提供的內容插值。
{{}} 中也可以寫 JS 表達式:
{{ number + 1 }} {{ ok ? "YES" : "NO" }} {{ message.split("").reverse().join("") }}指令
指令(Directives)是帶有 v- 前綴的特殊屬性。
v-bind{{}} 不能在 HTML 屬性中使用。針對 HTML 屬性需要使用 v-bind:
這對布爾值的屬性也有效 —— 如果條件被求值為 false 的話該屬性會被移除:
v-bind 也可以縮寫:
v-on
v-on 用來監聽 DOM 事件:
也可以縮寫成下面這樣:
v-ifNow you see me
這里 v-if 指令將根據表達式 seen 的值的真假來移除/插入
元素。
v-forv-for 指令可以綁定數組的數據來渲染一個項目列表:
實踐
- {{ todo.text }}
讓我們把目光回到 Hello.vue。在這個組件里面有一些鏈接列表, Essential Links 和 Ecosystem,這些列表直接使用 HTML 編寫:
按照傳統的寫法,如果我們需要往里面添加鏈接的時候,每次我們都得添加 和 標簽。思考兩個問題:
添加幾個鏈接還好,如果要添加非常非常多呢?難到要復制幾十次 和 標簽?
如果要動態改變鏈接列表呢?難道要使用 innerHTML 等方法修改 DOM?
聰明的你可能已經想到了,很明顯不需要這么做,我們可以使用模板語法。將鏈接信息寫到 Vue 的數據對象 data 里面,然后通過動態綁定的方式,將數據綁定到 DOM。
所以修改如下:
{{ msg }}
Essential Links
Ecosystem
這樣我們就把數據和視圖分開了,模板里面的代碼也簡潔了很多,不再需要寫很多重復的代碼。并且根據不同數據,我們也能展示出不同的 UI。
總結本文詳細講解了 vue-cli 初始化的項目代碼,并且在講解代碼的過程中,介紹了構造 vue 對象的一些參數,以及 vue 的一些基本概念,比如模板語法中的插值和指令。最后通過修改代碼對以上知識點進行實踐。
相信看到了這里,你對如何使用 vue 寫一個項目已經有了初步了解。當然,看完本文,可能還有很多概念理解不清楚,這時推薦去看一下 vue 的官方文檔,這個時候再去看官方文檔,應該就會輕松很多了。
https://github.com/nodejh/nodejh.github.io/issues/38
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83874.html
摘要:前端日報精選了解中的全局對象和全局作用域張鑫旭鑫空間鑫生活子進程你應該知道的一切直出內存泄露問題的追查實踐我他喵的到底要怎樣才能在生產環境中用上模塊化騰訊前端大會大咖說大咖干貨,不再錯過發布發布中文翻譯在使用進行本地開發代碼 2017-07-07 前端日報 精選 了解JS中的全局對象window.self和全局作用域self ? 張鑫旭-鑫空間-鑫生活Node.js 子進程:你應該知道...
摘要:中文官網英文官網組織發出一個問題之后,不要暫時的離開電腦,如果沒有把握先不要提問。珍惜每一次提問,感恩每一次反饋,每個人工作還是業余之外抽出的時間有限,充分準備好應有的資源之后再發問,有利于問題能夠高效質量地得到解決。 Vue.js資源分享 更多資源請Star:https://github.com/maidishike... 文章轉自:https://github.com/maid...
閱讀 3715·2021-10-14 09:43
閱讀 3311·2021-08-25 09:38
閱讀 609·2019-08-30 15:55
閱讀 1343·2019-08-30 13:05
閱讀 2238·2019-08-29 16:05
閱讀 501·2019-08-29 12:58
閱讀 2791·2019-08-29 12:34
閱讀 3241·2019-08-26 12:15