---
# System prepended metadata

title: Vue學習 Day1
tags: [Vue相關內容]

---

<!-- {%hackmd BJrTq20hE %} -->
###### tags: `Vue相關內容`
# Vue學習 Day1
1. 安裝node.js 選擇LTS(安全性較好)
1. cmd確認版本=>**node -v**   、    **npm -v**
7. **npm install yarn -g 在哪個路徑都可直接執行**
8. 安裝 **subline** or **VsCode**


### 安裝vue-cli不同版本
* 2.9.4
    * `npm install -g vue-cli (新增)`
    * `npm uninstall -g vue-cli (移除)`

* 4.x.x
    * `npm install -g @vue/cli (新增)`
    * `npm uninstall -g @vue/cli (移除)`
    * `npm i -g @vue/cli-init (設定init為全域)`
>若打不開vue ui環境變數加上:`%SystemRoot%\system32`

### 創建專案
`vue create 專案名`

以下為自選~
* **Choose Vue version**：要選，下一步我們要手動選擇Vue3版本。
* **Babel**：要選。
* **Router**：以路由方式轉跳頁面。
* **Vuex**：大型專案建議要選，資料集中管理的套件。
* **CSS Pre-processors**：應該幾乎沒有人在寫純的css了吧，下一步會讓你選是要用哪種預編譯。
* **Linter/Formater**：要選，讓你的程式碼漂亮排版、自動提醒語法錯誤，現在專案都是必用的了。

### package.json簡介
* name:專案名稱
* version:版本名稱
* author:作者
* description:詳細說明
* keywords:關鍵字

# NPM簡介
套件管理程式
### NPM安裝
**Terminal**
* **輸入值建立package.json**:`npm init()`
* **JQ不帶版本號則最新**:`npm install jquery@3.1.0`
* **Bootstrap不帶版本號則最新**:`npm install bootstrap@4.1.0`
* **安裝在package.json中的devDependencies內**:
`npm install webpack --save-dev`
* **安裝在Globall環境內**:`npm install webpack -g`
* **查詢安裝版號**:`npm ls`
### webpack為樹狀圖，從最上層用以下指令
**查目前安裝的套件**:`npm ls --depth = 0`
**查目前GLOBAL安裝的套件**:`npm ls -g --depth = 0`
#### 刪除套件
`npm uninstall webpack`



---

## package-lock.json
保持大家的套件版本一致(**版本控制**)

# yarn簡介
facebook出產(為了解決npm安裝效率問題)**為了取代npm**。

## yarn安裝
**若無法執行yarn init**
```cmd
打開 PowerShell 
1.執行 Set-ExecutionPolicy -Scope CurrentUser
2.執行 Set-ExecutionPolicy RemoteSigned
```
```cmd
在 Windows 10 使用 yarn 安裝 @vue/cli ，
若輸入 vue 卻沒有此指令時, 那是因為環境參數沒有加入 
%USERPROFILE%\AppData\Local\Yarn\bin; ，
可以在 電腦(右鍵)->內容->進階系統設定->環境變數->
選取系統變數Path->編輯->
加入指令路徑->確認設定 加入即可。
```
**Terminal**
* 初始化 `yarn init`
* 新增最新套件 `yarn add [package]`
* 新增特定版本套件 `yarn add [package]@[version]`
* 新增特定tag套件 `yarn add [package]@[tag]`
* 新增套件至 `devDependencies yarn add [package] --dev`
---

* **安裝jq3.1.0**:`yarn add jquery@3.1.0`
* **移除webpack**:`yarn remove webpack`
* **GLOBAL新增**:yarn **global** add webpack
* **GLOBAL查詢**:yarn **global** list 
* **GLOBAL刪除**:yarn **global** remove webpack


---


# MVX 及 Flux
### MVX主要核心概念
MVX、MVC(Control、View、Model)、MVP、MVVM

* MVP=>替換掉controller(presenter
* 重要:**資料雙向綁定**
* **Flux**-單向資料流
* **簡化**程式的**複雜性**



---

# Vue.js 特性簡介
1.MVVM概念設計。具備**雙向綁定**。
2.搭配v-bind可實現**單一資料流(flux)**。
3.元件開發，將**網頁拆分成不同元件**。
4.狀態機管理，搭配VUEX可**實現狀態機管理**，統一管理顯示資料。

---
### jsDelivr--
以CDN引用JS套件

---

# Vue 實作HELLO WORLD
**app.js**
```javascript=
var vm = new Vue({
	el: "#app",
	data: {
		message: 'Hello World',
        list: ['超級白','草尼馬','八哥牙落']
	},
    method: {
        test(){
        
        },
        test1:function(){
        
        }
    }
})
```
**基本指令說明** index.html
```javascript=
<div id="app">
	<!-- 1.文字的綁定 -->
	{{message}}
    
	<!-- 2. 迴圈 v-for -->
	<ul>
		<li v-for='name in list'>{{name}}</li>
	</ul>
    
	<!-- 3. 事件 v-on -->
	<button v-on:click='test'>按我一下</button>
    
	<!-- 4. 表單輸入 v-model -->
	<input type="text" v-model="message"/>
    
	<!-- 5. 條件式 v-if -->
	<ul v-if="isShow">
		<li v-for='name in list'>{{name}}</li>
	</ul>

</div>
```

## 資料綁定(v-bind)與Class、Style控制
**is-active**若使用的class有"-"，需要**單引號**
```javascript!
<div id="app">
<!-- 1. 資料綁定 與 Class 控制 -->
	<p v-bind:class="{'is-active': isActive, child:isChild }" class="item">
		變動的Class
	</p>
	
    <!-- 2. 更新綁定資料 與 Class 控制 -->
	<button v-on:click="isActive=!isActive">切換</button>
	
    <!-- 3. 資料綁定 與 Style 控制 -->
	<p v-bind:style="{color: textColor}" class="item">
		變動的樣式(style)
	</p>
	
    <!-- 4. 更新綁定資料 與 Style 控制 -->
	<button v-on:click="changeColor">按我變顏色唷</button>
</div>
```

## DEMO圓
**index.html**
```javascript=
<div id="app">
	<!-- v-model -->
	<svg>
		<circle cx="100" cy="75" v-bind:r="radius" fill="pink">
	</svg>

	<input type="range" min="0" max="100" v-model="radius" />
</div>
```
**app.js**
```javascript=
var vm = new Vue({
	el: "#app",
	data: {
		radius:30,
	},
	methods: {
		
	}
})
```

# BootStrap官網利用CDN
```javascript
BootStrap
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">

JS
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
```


# 一日總結
![](https://i.imgur.com/lOqY24D.jpg)
* **View**：呈現資料、與使用者互動
* **ViewModel**：處理資料的邏輯
* **Model**：資料儲存、資料型別、撈資料









