web 用到 各部分功能 如何使用
# html css bootstrap javascript jquery json ajax vue element-ui
# node.js AnglerJs
# html
-- 标簽
# css
-- 樣式
-- <style></style>
-- <link href="css/earth.css" target="_blank" rel="external nofollow" rel="stylesheet" type="text/css">
-- class="a" .a{ font-size: 18px; } id="b" #b{}
# bootstrap
-- 架構 最大作用: 封裝css樣式 直接用
-- <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" rel="stylesheet">
-- 分頁
-- <ul class="pagination">
-- <li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >«</a></li>
-- <li class="active"><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >1</a></li>
-- <li class="disabled"><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >2</a></li>
-- <li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >3</a></li>
-- <li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >4</a></li>
-- <li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >5</a></li>
-- <li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >»</a></li>
-- </ul>
# javascript
-- 使頁面動起來 動畫
-- <script></script>
-- <script src="js/earth.js"></script>
-- 變量 var a = 1; 函數function do(){} 對象 var dx = {};
-- 頁面加載完成執行 !function(){}();
# jquery
-- 封裝js 另一套api
-- <script src="https://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script>
-- 入口函數 $(function(){ 代碼 $("#id").click(function(){ 點選之後代碼 }); });
# json
-- json 輕量級資料交換格式
-- js對象 和 字元串 互轉
-- json串 "[ {name:"lvjing",age:"23"},{} ]"
-- js對象 [ {name:"lvjing",age:"23"},{} ]
-- JSON.parse(字元串) JSON.stringify(js對象)
# ajax
-- jquery的一個方法
-- 異步通路,局部重新整理
-- 文法 : 添加jquery
--使用 : 1. 直接放在$(function(){ 中 }) 會在頁面加載完成之後執行 2. 可以放在點選一個按鈕$("#btn").click(function(){ 執行ajax });
$.ajax({
type:"post",
url:"",
data:{
"name":"lvjing",
"age":"23"
},
contentType:"application/json;charset=utf8",
dataType:"json",
success:function(data){
$("#username").text(data.name);
},
error:function(e){
console.log("error");
}
});
# vue
# element-ui
# node.js
# 我寫過的功能
1. 滑鼠點選任意位置出現文字
2. 背景動态先裝粒子特效
3. 擷取鍵盤點選的哪一個 -使用在輸入完密碼回車執行登入
4. 在html頁面中引入另一個html頁面的标簽
5. 取消按鈕 x
vue搭建環境
# vue 搭建環境
> 安裝: nodejs
npm -v
npm config get registry 目前配置鏡像
npm config set registry https://registry.npm.taobao.org 使用淘寶鏡像
> vue 腳手架 vue-cli
npm install vue-cli -g 安裝vue-cli腳手架
npm uninstall vue-cli -g 解除安裝vue-cli腳手架
vue --version
> 建立vue項目
工作空間下 dos
vue init webpack jt
參數:
Project Name 項目名稱,預設,回車
Project description 預設,回車
Author chenzs 作者
vue build 預設,回車
install vue-router? 是否安裝router,輸入:y 安裝
Use ESLint to lint your code? 規則引擎,過于嚴苛,輸入:n
Setup unit tests? 單元測試,輸入:n
Setup e2e tests with Nightwatch(Y/n)? 測試架構Nightwatch,輸入:n
Should we run 'npm install' for you after the project has been created? 預設npm,回車
> 啟動項目
npm run dev http://localhost:8081
# vue 項目
> App.vue 主界面
> 自定義元件 Item.vue 在主界面中<Item></Item> 進行使用自定義元件
> components中寫自定義元件 template中寫頁面 script中寫資料 style中樣式
> 使用element-ui main.js中導包 導入element-ui的插件
# element-ui
> 安裝 npm i element-ui -S
> 修改vue中main.js 導入element-ui
> import ElementUI from 'element-ui';
> import 'element-ui/lib/theme-chalk/index.css';
> Vue.use(ElementUI);
> 使用
> div中使用element-ui官網樣式标簽
# Promise
Promise 對象用于表示一個異步操作的最終完成 (或失敗)及其結果值。
# axios
Axios 是一個基于 promise 的 HTTP 庫,可以用在浏覽器和 node.js 中。
> npm install axios --save-dev
> main.js
> import axios from 'axios';
> Vue.prototype.$http = axios;
# less-loader less
less-loader webpack 将 Less 編譯為 CSS 的 loader。
Less 是一門 CSS 預處理語言,
它擴充了 CSS 語言,增加了變量、Mixin、函數等特性,使 CSS 更易維護和擴充。
> npm install less less-loader --save-dev
# vue-quil-editor 富文本編輯器
> npm install vue-quill-editor --save
> main.js
> import VueQuillEditor from 'vue-quill-editor';
> import 'quill/dist/quill.core.css';
> import 'quill/dist/quill.snow.css';
> import 'quill/dist/quill.bubble.css';
> Vue.use(VueQuillEditor);
# echarts 一個基于 JavaScript 的開源可視化圖表庫
> npm install echarts --save
> main.js
> import echarts from 'echarts';
> Vue.prototype.$echarts = echarts;
# vue搭建環境2
node.js
淘寶影像 npm config set registry https://registry.npm.taobao.org
安裝vue 用戶端 npm install -g @vue/cli --force
初始化 vue ui
用戶端
建立 1.詳情 2.預設 手動 3.功能 router 使用配置檔案 4.配置 ESLint+ StandardConfig
插件 1.vue-cli-plugin-element 手動導入 2.axios 3.less-loader npm install [email protected] 4.less 5.vue-quil-editor 6. echars插件
關閉ESLint校驗
項目打包 npm init -y npm i express -S
# 知識點
> 在html頁面中引入另一個html頁面的标簽
<iframe src="page/canvas-nest.html" frame name="content_frame" width="520px" height="520px" marginwidth=0 marginheigh=0></iframe>
<iframe> 标簽規定一個内聯架構。
一個内聯架構被用來在目前 HTML 文檔中嵌入另一個文檔。
> 滑鼠點選頁面任意位置出現文字
append-text.js
> 背景的動态線狀粒子特效
canvas-nest.js
筆記 2
# web
## html标簽
.ul ol type li .img .a href target .input .table tr td th .form
.audio .video
> 回到頂部
.a href="" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" name="_top"
.a href="#_top" target="_blank" rel="external nofollow"
> input
.[type] text password radio單選 number week日期 checkbox多選 button submit送出 email date value
> table
.table bgcolor cellspacing
.td colspan rowspan
> from
placeholder name checked select option textarea button
> audio video
controls
## css
## bootstarp3
<!-- 新 Bootstrap 核心 CSS 檔案 -->
<!-- jQuery檔案。務必在bootstrap.min.js 之前引入 -->
<!-- 最新的 Bootstrap 核心 JavaScript 檔案 -->
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" rel="stylesheet">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
> 表格
> 表單
> 按鈕
<div class="clearfix" > clearfix 取消浮動 裡面的内容是浮動的 對于div會有位置變化 使用clearfix會取消浮動 使得按鈕在div裡面
<button type="button" class="close">×</button>
</div> 關閉圖示
<button type="button" class="btn btn-primary btn-lg" style="text-shadow: #CCCCCC 5px 3px 3px; background-color:#FFCCCC;">
<span class="glyphicon glyphicon-heart" style="color: #FFFFCC;"> Heart</span>
</button> 圖示按鈕
> 圖檔
> bootstrap模闆
> ---------------------------------
<!DOCTYPE html>
<html >
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3個meta标簽*必須*放在最前面,任何其他内容都*必須*跟随其後! -->
<title>Bootstrap 101 Templat</title>
<!-- Bootstrap -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" target="_blank" rel="external nofollow" rel="stylesheet">
</head>
<body>
<h1>你好,世界!</h1>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依賴 jQuery,是以必須放在前邊) -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>
<!-- 加載 Bootstrap 的所有 JavaScript 插件。你也可以根據需要隻加載單個插件。 -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</body>
</html>
> ---------------------------------
## js
> if if-else
> for while for-in
> 參數 傳回值
> 數組: 長度可變, 存各種類型
> onmouseenter="print1()" 滑鼠滑過觸發功能
> prompt() 彈出框輸入内容
> === 比值 === 比值和類型
> 從浏覽器輸入的資料預設是String類型 可以使用parseInt()->number
> 變量
. var 變量名 = 變量值;
. 類型: 整形 字元串 小數
. 檢視資料類型 typeof a
> 函數
. function a(){} --相對效率快
. var b = function(){}
. var c = new Function("a","b","return a*b"); --效率慢
. !function(){}(); --加載頁面完成就執行此方法 自調用
. 箭頭函數
var a = function(){alter(1);}
var a = () = {alert(1);} var a = () = alert(1);
> 對象
.1. function p2(){}
var p = new p2();
p.name = "lvjing';
p.study = function(){console.log(12)}
調用: p.study();
console.log(p.name);
.2. var p1 = {
"name":"lvjing",
"study":function(){
console.log(1);
}
}
調用: console.log(p1.name);
> dom
document.getElementById("lj").--
.. innerText-文本有效 innerHTML-可以使用html标簽改變
> js擷取鍵盤 按的哪個
input type="text" onkeydown="jssave(event)"
function(e){
var keynum = window.event ? e.keyCode : e.which; // 鍵的數值
var keychar = String.fromCharCode(keynum); // 鍵名字
if(keynum==13){console.log("按下的是enter鍵");}
}
> js 和 jquery
js事件放在标簽中
jquery事件使用$("#a") 擷取選擇器 (例: .css) 執行
$('.item').mouseover(function(event){
console.log(event); //擷取事件對象
console.log(event.target.id); //擷取容器id
console.log(event.pageX); //擷取滑鼠位置:x坐标
console.log(event.pageY); //擷取滑鼠位置:y坐标
});
## jquery
百度 cdn : script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"
Staticfile CDN : script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"
<script src="https://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script>
> 入口函數 : 在頁面加載完成之後運作 DOM加載完成之後
$(document).ready(function(){ 執行jquery代碼 });
$(function(){ 執行jquery代碼 });
> 選擇器
$("div")
$(".a") $("#a")
$("div,.a,#b")
$("input[type='text']")
> 隐藏/顯示
.hide()
.show()
> 捕獲
text() - 設定或傳回所選元素的文本内容 <p>你好</p> 擷取到你好
html() - 設定或傳回所選元素的内容(包括 HTML 标記) <p><b>你好</b></p> 擷取到 <b>你好</b>
val() - 設定或傳回表單字段的值
> css
.. addclass
.a{}
$("#a").addClass("a");
.. css
$("#q").css({"color":"red","font-size":"12px"});
> 鍵盤點選事件
.keydown(function(){})
.keyup(function(){})
> jquery擷取鍵盤按鍵方式
input type="password" id="password" placeholder="password"
$("#password").keyup(function(e){ if(e.keyCode==13){ alert("擡起enter鍵") } });
> jquery方式執行按鈕的點選事件
button id="btn"
$("#btn").click(function(){});
再次執行此按鈕的方法: $("#btn").click();
## json
> web(用戶端) 用戶端中 交換服務端資料
> 字元串 <--> js對象
[常用] : 從服務端擷取的資料 通過JSON轉換為js對象在用戶端中使用 服務端 --> 用戶端 response
JSON 指的是 JavaScript 對象表示法(JavaScript Object Notation)
JSON 是輕量級的文本資料交換格式
JSON 獨立于語言:JSON 使用 Javascript文法來描述資料對象,但是 JSON 仍然獨立于語言和平台。
[
{ key1 : value1-1 , key2:value1-2 },
{ keyN : valueN-1 , keyN:valueN-2 }
];
> JSON.parse()
JSON 通常用于與服務端交換資料。
在接收伺服器資料時一般是字元串。
使用 JSON.parse() 方法将 資料轉換為 JavaScript 對象。
> JSON.stringify()
JSON 通常用于與服務端交換資料。
在向伺服器發送資料時一般是字元串。
我們可以使用 JSON.stringify() 方法将 JavaScript 對象轉換為字元串。
> json js對象
json字元串 [{"name":"lvjing"}]
js對象 [{name:"lving"}]
## ajax
>>> jquery 提供了ajax
> AJAX = 異步 JavaScript 和 XML(Asynchronous JavaScript and XML)。
> 作用:
異步通路 不用等待上一個請求結束 進行請求
局部重新整理 在不重新加載整個頁面的情況下,可以與伺服器交換資料并更新部分網頁内容。
建立快速動态網頁
> request
> 文法: 參數
$.ajax({
type: 請求類型 get/post
url:
data:{} 請求資料 json串格式
contentType: 發送請求格式 "application/json;charset=utf-8"
dataType: 傳回資料格式 "jsonp"跨域
success:function(data){} 通路成功進行的操作
error:function(e){} 通路失敗
})
## JSON-Ajax
ajax json
.. ajax 用戶端請求 并傳回資料
異步通路
局部重新整理
.. json 對擷取的資料 -> js對象
存儲 交換文本資訊 --在網絡中傳輸資訊 JSON安全 --JSON 是輕量級的文本資料交換格式
[問題]
..前端擷取輸入 怎麼給後端存 ---通過url執行後端的方法 參數也是通過url傳遞
..查詢後端傳回資料 前端怎麼展示 ---前端要查詢,url執行後端方法,後端查詢到,傳回return給前端,前端展示
... ajax 通過url 參數 通路服務端擷取資料 success之後進行解析
... url中的參數
... json可以把傳回的 對象裝換為字元串 通過JSON裝換為js對象進行使用
# vue
## node.js
> json
輕量級資料交換格式
結構 1.對象 名稱/值 {name:"lvjing",age:23} 2.數組 ["lvjing","23"] 3.嵌套格式 [{},{}]
> 請求方式 post/delete/get/put RestFull
> ajax
data 傳遞參數
對象: data:{id:100,name:"lvj"} 拼接字元串: data: id=100&name="lvj"&age=14
for循環 擷取資料
for (var i=0;i<data.length;i++){console.log(data[i])}
for (index in data){console.log(data[index])} // in關鍵字周遊下标
for (user of data){console.log(user);}// of 周遊對象
向表中添加每行
反引号 `` 模闆字元串
let tr = `<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.sex}</td>
</tr>`;
解決問題: 拼接字元串換行 + " 繁瑣
> 跨域
如果 浏覽器請求的網址 與 ajax請求網址 必須滿足同源政策 浏覽器才能解析請求
.. 同源政策
請求協定 ://域名:端口 域名和端口号都滿足
跨域資源共享CORS
# ajax異步原理
同步: 使用者發起請求時,要求第一時間伺服器做出響應.在此期間使用者不可以做其它操作,隻能等待伺服器傳回資料. 重新整理1次.
異步: 使用者發起請求時,要求伺服器做出響應.在此期間使用者可以做其它的操作.如果後端伺服器傳回資料則通過回調函數通知客戶. 局部重新整理多次.
## vue
漸進式架構 -
一個大頁面包含..四部分..每部分由各自的頁面負責, 互不幹擾,
cdn : <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
國内 通路 國外 營運商 cdn緩存
# 文法
{{messsage}} 插值表達式 可以直接擷取data中定義的常量message
var app = new Vue({
el: '#app', // 對哪個标簽起作用
data: { // 定義所有的變量/常量
message: '123'
},
methods: { // 定義所有事件
show: function(){
condole.log(0123);
}
}
})
# API 指令
v-cloak : 在頁面解析完代碼之前,隐藏插值表達式 --不會顯示,直到編譯結束。
v-text="name" 給标簽指派, 不用插值表達式
v-html="html" 解析定義在data中變量
v-pre vue不解析所在标簽
v-once 所在标簽 内容 使用的vue中資料隻加載一次 雙向綁定失效
> 雙向綁定
v-model="msg"
> 事件綁定
v-on 監聽時間
v-on:click="num++" num會增加1
@click="num3()" methods:{ num3:function(){ this.num+=3; } }
@click.stop="num3()" 阻止單擊事件繼續傳播
@click.prevent="" 阻止預設行為
> 按鍵通路修飾符
v-on:keyup @keyup.enter="enter1()"
v-on:keydown
v-on:keypress
> 屬性綁定
v-bind:屬性="key"
<a v-bind:href="url" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >百度</a>
<a :href="url" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >百度</a>
> 類型綁定
:class="{t1:t1flag,t2:t2flag,t3:t3flag,t4:t4flag}
:class="myClass" data:{myClass:"redClass"} 動态調整樣式
> 分支結構
v-if
v-else-if
v-else
> 循環結構
v-for
數組:
hobby: ['電腦','手機','平闆'],
<span v-for="item in hobby">{{item}}</span>
對象:
user: {id: 12,name: 'lvjing',age: 23},
<span v-for="value in user">{{value}}</span> <br>
<span v-for="(value,key,index) in user">{{key}}:::{{value}}:::{{index}}; </span>
集合:
userList: [
{id:100,name:'lv',age:23},
{id:200,name:'lvj',age:24},
{id:300,name:'lvji',age:25}
]
周遊集合 : <span v-for="(user,a) in userList">{{user.id}}---{{a}}...</span>
區分節點: <span v-for="user in userList" :key="user.id">{{user.id}}...</span> <br>
> 雙向綁定--input--textarea(文本域)--select--radio--checkbox
> 屬性
.number(使用者輸入變為數值類型)
.trim(去掉開頭結尾空格) 不計算空格
.lazy(将input改為change) 離焦之後出現效果,滑鼠離開之後
v-model.number="age"
字母反轉
msg.split('').reverse().join('')
計算屬性:{{reverse}} --
vue({
computed:{
reverse: function(){ return this.msg.split('').reverse().join(''); }
}
})
計算屬性computed 與 方法methods 差別
1.
計算屬性 方法 加傳回值 使用{{reverse}}接收結果
2. 緩存
計算屬性具有 緩存機制 隻加載一次,可以反複使用 使用場景:要反複使用同一個值時
方法沒有緩存機制,一次方法執行一次
> 數組用法介紹
1.push() 在最後一個追加
2.pop() 删除最後一個
3.shift() 删除第一個元素
4.unshift() 在開頭追加一個元素
5.splice() 在指定位置替換元素
替換: 參數說明: 1.操作資料起始位置 2. 操作數量 3.替換元素的值(如果不寫表示删除)
this.spliceNum.splice(this.startN,this.count,this.value)
删除: this.spliceNum.splice(this.startN,this.count)
6.sort() 數組排序 預設是按照字元編碼的順序進行排序
7.reverse() 數組反轉
# vue的生命周期
> 鈎子函數
8個函數 初始化-4 修改-2 銷毀-2
預定義的函數進行操作
> 執行個體化成功
mounted(){}
beforeCreadted vue執行個體的挂載元素$el和資料對象data都為undefined,還未初始化。 加loading事件
created vue執行個體的資料對象data有了,$el還沒有 結束loading、請求資料為mounted渲染做準備
beforeMount vue執行個體的$el和data都初始化了,但還是虛拟的dom節點,具體的data.filter還未替換。
mounted vue執行個體挂載完成,data.filter成功渲染 配合路由鈎子使用
beforeUpdate data更新時觸發
updated data更新時觸發 資料更新時,做一些處理(此處也可以用watch進行觀測)
beforeDestroy 元件銷毀時觸發
destroyed 元件銷毀時觸發,vue執行個體解除了事件監聽以及和dom的綁定(無響應了),但DOM節點依舊存在 元件銷毀時進行提示
created () {
console.log('==============' + 'created' + '===================')
console.log(this.$el)
console.log(this.$data)
console.log(this.filter)
},
# promise
> 解決傳統ajax回調地獄問題 B包
# axios
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
> 1. axios封裝了promise,異步調用更簡潔
> 2. 請求類型 post delete get put
> 3. 分組 get/delete post/put 用法分
> 4. 參數:
url:
請求參數
> 5. 使用:
axios.get("url")
.then()
.catch();
axios.get("url",{
params: { ID:1234 }
})
.then() -success
.catch(); -error
axios({
methods: 'get',
url: url,
params: {id:1}
})
data:{} 隻适用于這些請求方法 'PUT', 'POST', 和 'PATCH'
restFul 簡化get請求
無狀态請求
> 6. ajax 回調地獄
.then的存在 傳回promise對象
使用 鍊式加載結構 方法加傳回值
> 7. 簡化
1. 公共路徑: axios.defaults.baseURL="http://localhost:8614/user/";
2. 解構指派
await 辨別異步請求,解構操作
async 函數中支援解構
let {data:value} 用來接收解構後的對象,,将傳回值指派給value, value就是後端的傳回值
async function saveBtn(){
let {data:value} = await axios.post('saveUser',this.user)
}
# 箭頭函數
function(result){
console.log(result.data);
}
(result)=>console.log(result.data)
result=>console.log(result.data)
# 跳轉頁面
location.href="http://47.92.74.202:81/payment.php" target="_blank" rel="external nofollow" ;
# 頁面展現快 vue
記憶體中有該對象, vm-虛拟DOM對象
# let const
let 聲明的變量隻在 let 指令所在的代碼塊内有效。
const 聲明一個隻讀的常量,一旦聲明,常量的值就不能改變。
# vue 元件化
>1. 分布式 分層
tomcat(使用者管理,部門管理)
子產品拆分: tomcat(使用者管理) tomcat(部門管理)
層級拆分: pojo dao service controller util
核心理念: 分布式架構,解決系統架構的耦合性
>2. 元件
分布式思想, 頁面分區
提取共性, 封裝為元件
>3. 元件化
單獨定義html/css/js, 元件之間互不影響.
>4. 步驟
要求:
元件名(标簽名), 元件模闆id
元件模闆id定義-template:"#appTem",
資料定義data是一個函數傳回變量-date(){return{msg:"msg"}},
方法methods-methods:{}
定義元件模闆,模闆内必須有一個根目錄 <div></div>
元件名,定義元件名為駝峰規則,使用時标簽内.大寫字母前使用- 例如: 元件名: appComOne 标簽: <app-com-one></<app-com-one>>
全局元件
所有div内都能用
1. vue對象綁定頁面中div id="app"
2. 定義全局元件 Vue.component("appComOne",{template:"#appComOneTem",data(){return{}},methods:{}})
3. 定義全局元件模闆(在body中), <template id="appComOneTem"><div>模闆内容</div></template>
4. 使用全局元件,在vue綁定的div内 <app-com-one></app-com-one>
局部元件
隻能在定義的div内使用, new Vue()的el内, 定義局部元件實作在vue的components内
1. vue對象, 綁定div的id el:"app", 定義局部元件 components:{app1:app1,app2,app2}
2. 定義局部元件 對象 let app1={template:"#app1Tem",data(){return{}},methods:{}} let app2={}
3. 定義局部元件模闆 <template id="app1Tem"><div>模闆内容</div></template>
4. 使用局部元件,在vue綁定的div内 <app1></app1>
>4.1 全局元件實作
展示頁面
<div id="lvj">
使用元件 引用元件..标簽解析是變成小寫..駝峰用 - componentName component-name
<component-name></component-name>
</div>
定義元件模闆html 有一個根目錄<div>
<template id="componentDiv">
<div><h4>測試元件</h4>資料:{{num}}<button @click="addNum()">自增</button></div>
</template>
<script>
全局元件--元件名
Vue.component("componentName",{
元件模闆--模闆id
template: "#componentDiv",
屬性 元件内有效
data(){return{num:1}},
方法定義
methods:{addNum(){this.num++;}}
})
vue對象-綁定div.lvj
new Vue({el:"#lvj"})
</script>
>4.2 局部元件實作 隻能在目前元素内部使用
<div id="app1">
使用局部元件app1
<app1></app1>
</div>
<div id="app2">
不能用,局部元件,隻能用在app1中
<app1></app1>
</div>
定義局部元件模闆具體實作
<template id="app1Tem">
<div><span v-show="kw">app1資料 : </span>{{msg}}<button @click="showW()">kw</button></div>
</template>
<script>
定義局部元件的具體實作, 是個對象, 先定義後使用-(寫在new Vue()前)
let app1 = {
元件模闆, 模闆id
template: "#app1Tem",
data(){return{msg:"app1",kw:false}},
methods:{showW(){this.kw=true}}
}
let app2 = {}
定義vue對象
new Vue({
el: "app1",
app1内的局部元件定義
components:{com1: com1,com2: com2}
})
</script>
# vue 路由 Router
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
> 概念
網絡通信 映射關系
使用者發起請求,
> 前端路由/用戶端路由
将所有的路由的配置生成js, 儲存到浏覽器, 使用者請求, 自己映射對應的請求資訊( 元件 ), 直接通路靜态資源
> 集中式路由
所有的使用者請求都經過後端,後端路由/伺服器端路由
> 把路由位址資訊放到前端浏覽器
前端伺服器 .靜态資源 .html頁面
> 頁面跳轉
<a></a>
> 步驟
1. 建立路由對象
2. 建立vue對象, 把路由對象交給vue管理
3. 建立局部元件對象, 把元件給路由使用
4. 建立局部元件html模闆頁面
5. 定義路由連接配接, <router-link to="/user">, 在vue綁定div中, router-link編譯為a, to編譯為href
6. 路由填充位, 使用路由中用到的元件, <router-view>
<div id="appR">
<router-link to="/user"><router-link>
<router-view></router-view>
</div>
<template id="appRTem">
<div> <h3>路由元件</h3> </div>
</template>
<script>
let router = new VueRouter({
路由規則
routes: [{path:"/user",component:user}]
})
new Vue({
el: "appR",
router:router
})
let user = {template:"#appRTem"}
</script>
# 重定向
> 概念
url 請求位址發生變化
重定向請求發送多次, 多次請求,多次響應
重定向是服務行為
重定向不能傳遞參數
> 實作
redirect 跳轉頁面
let router = new VueRouter({
routes: [
{path:"/index",redirect: "/user"}
]
})
# 路由嵌套機制 children
> 元件嵌套
router-view元件中有router-view
元件頁面中包含router-view
> 步驟
1. new Vue() 對象綁定div
2. new VueRouter() 定義路由規則,使用的元件 new VueRouter({routes:[ {path:"/",redirect:"/user"},{path:"/user",component: user, children: [{path:"/user/name",component:name},{path:"/user/age",component:age}] } ]})
3. let user={template:"#userTem"} 定義元件頁面 let name={template:`<h3>lvjing</h3>`} let age={template:`<h4>24</h4>`}
4. 定義user元件的具體内容 , 子元件占位符 <template id="userTem"> <div> name.age <router-link to="/user/name">name <router-link to="/user/age">age <router-view>
5. 使用 body <div id="app"> <router-link to="/user"> <router-view>
# 執行個體
https://gitee.com/zhao-qing-jing/ssmpro2104-jt/tree/master/g-vue-component/src/main/resources/static/vueCom
# vue 腳手架
> 架構
> .vue檔案
1. template 頁面模闆, html頁面内容
2. script js内容
3. style 樣式渲染
> src 目錄 結構
APP.vue 預設跳轉頁面
main.js 腳手架核心配置js
router 設定路由
plugins 引入ui工具
components 元件, 頁面 welcome login register home 業務頁面
assets css/js, 引入第三方圖示樣式
> main.js 檔案配置規則
核心配置
控制整個腳手架的運作的初始js, 公共依賴資訊, 全局變量
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
import './assets/css/global.css'
import './assets/ali-icon/iconfont.css'
/* 導入富文本編輯器 */
import VueQuillEditor from 'vue-quill-editor'
/* 導入富文本編輯器對應的樣式 */
import 'quill/dist/quill.core.css' // import styles
import 'quill/dist/quill.snow.css' // for snow theme
import 'quill/dist/quill.bubble.css' // for bubble theme
/* 導入axios包 */
import axios from 'axios'
/* 設定axios的請求根目錄 */
axios.defaults.baseURL = 'http://localhost:8705/'
/* 向vue對象中添加全局對象 以後發送ajax請求使用$http對象 */
Vue.prototype.$http = axios
Vue.config.productionTip = false
/* 定義過濾器 */
Vue.filter("priceFormat",function(price){
return (price / 100).toFixed(2)
})
/* 将富文本編輯器注冊為全局可用的元件 */
Vue.use(VueQuillEditor)
new Vue({
router, /* 路由 */
/* 綁定頁面 id="#app" */
render: h => h(App) // 1. 綁定頁面
}).$mount('#app') // 2. 綁定div元素
> 父元件 向 子元件傳遞參數
/* 向vue對象中添加全局對象 以後發送ajax請求使用$http對象 */
Vue.prototype.$http = axios
/* 将富文本編輯器注冊為全局可用的元件 */
Vue.use(VueQuillEditor)
Vue.prototype 父子元件參數傳遞, 屬性/對象傳參
Vue.use() 父子元件插件傳遞
> 子元件 向 父元件傳遞參數
// 對外聲明路由對象 子元件向父元件傳遞資料
export default router
> 檔案如何綁定的
main.js中new Vue() 對象中 路由, 頁面
頁面 APP.vue
路由 router/index.js
進入登入界面
> main.js 定義vue對象,
> router/index.js 定義路由(url索引), 請求路徑與元件映射關系, 使用指定元件(頁面) 規則: {path: '/', redirect: '/login'},{path: '/login', component: Login}
> App.vue 使用路由占位符,加載路由對象, 展示界面 router
> components/Login.vue 具體頁面實作, 元件
main.js
new Vue({
router, /* 路由 */
/* 綁定頁面 id="#app" */
render: h => h(App) // 1. 綁定頁面
}).$mount('#app') // 2. 綁定div元素
App.vue
<template>
<div id="app">
<!-- 添加路由占位符-->
<router-view></router-view>
</div>
</template>
router/index.js
const router = new VueRouter({
// 路由規則
routes:[
{path: '/', redirect: '/login'},
{path: '/login', component: Login}
]
})
login
頁面
# element
> element-ui 導入vue
>1. 導入插件
>2. 父向子傳遞插件
import Vue from 'vue';
import {
Pagination, 分頁
Dialog, 對話框
} from 'element-ui';
Vue.use(Pagination);
Vue.use(Dialog);
//将彈框元件挂載到Vue對象中 使用者可以使用this關鍵字調用
Vue.prototype.$message = Message
//通過MessageBox函數定義 消息提示框
Vue.prototype.$confirm = MessageBox.confirm
>3. 使用
路由配置中 配置頁面元件
import ElementUI from '../components/ElementUI.vue'
{path: '/elementUI', component: ElementUI}
ElementUI.vue 元件中具體頁面
<div>
<div class="block">
<span class="demonstration">評分 {{value2}}</span>
<el-rate v-model="value2" :colors="colors"></el-rate>
</div>
</div>
>4. 屬性
ref 标明是form表單
:model="" 屬性綁定, 對象綁定
>5. 表單校驗
el-form :rules="rules"
el-form-item prop="name"
定義rules驗證規則
data(){return{
rules: {
username: [{required:true,message:'please enter your username',trigger:'blur'},{min:3,max:10,message:'長度在3-10之間',trigger: 'blur'}],
password: [{ required: true, message: 'please enter your password', trigger: 'blur' },{ min: 3, max:30, message: '長度在 3 到 30 個字元', trigger: 'blur' }]
}
}}
required true 必須
trigger blur離焦
>6. 重置
擷取表單資訊,然後執行重置函數
resetFields 對整個表單進行重置,将所有字段值重置為初始值并移除校驗結果
this.$refs[formName].resetFields();
this.$refs.loginFormRef.resetFields()
>7. 登入
1. validate
對整個表單進行校驗的方法,參數為一個回調函數。該回調函數會在校驗結束後被調用,
并傳入兩個參數:是否校驗成功和未通過校驗的字段。若不傳入回調函數,則會傳回一個 promise
Function(callback: Function(boolean, object))
this.$refs.loginFormRef.validate( valid => { 校驗之後 失敗傳回 成功執行請求 } )
2. post請求 form表單 參數username,password
3. 資料是否正确校驗, 查詢
4. 回執, 資料處理完, 告訴前端, 狀态資訊status 200-成功 201-失敗
5. 登入之後,短時間内再次進入,不需要再次登入, token秘鑰
登入成功,跳轉到首頁
> 接口文檔
前後端資料需要哪些,參數,方法
> . 後端傳回 token 前端需要儲存, 如何存儲?
. Session-會話控制/會話機制 : 存儲使用者資訊(所需屬性和配置), 使用者會話存在期間, 資訊一緻存在
當使用者在app中的網頁之間跳轉時, 存儲在Session對象中的變量不會丢失, 在整個使用者會話中儲存下來
* 短時間内(會話期間)有效
. Cookie- :
網站識别使用者身份, 将session中的資訊儲存到計算機本地, 暫時或永久儲存
加密的資料
* 一段時間内有效 例如:七天免密登入
.. 例如:
session 安全 銀行, 财務, 員工
cookie 騰訊會員
.. 使用:
前端:
session
//擷取使用者token資訊(後端傳回的)
let token = result.data
window.sessionStorage.setItem("token",token)
cookie
.. 檢視:
浏覽器:
F12 Application/Session Storage
...解決 登入之後(頁面跳轉)的使用者資訊展示在首頁中,
> 8. 路由導航守衛
: 不讓使用者使用url路徑随便進入系統頁面
http://localhost:8614/#/home 直接進入了首頁 不允許
沒有登入,直接輸入url進入首頁---不允許 登入之後--允許
router/index.js
方法 : router.beforeEach()
方法參數 : 回調函數 (to,from,next) => {}
回調函數參數 : to..要通路的路徑 from..從哪個路徑來 next..請求放行
政策: /login..放行 不是/login..校驗token...有放行...沒有跳轉到/login
router.beforeEach(
(to,from,next) => {
if(to.path === "/login") return next(); // 放行
let sessionToken = window.sessionStorage.getItem("token");
if(token) return next(); // 放行
next("/login"); //跳轉到/login
}
)
> 首頁 Home.vue
> 9. 左側菜單
> 10. user
> 11. 作用域插槽
<!-- 作用域插槽, 通過一個标簽擷取目前行對象, -周遊的資料 slot-scope="scope" -->
<template slot-scope="scope">
<el-switch v-model="scope.row.status" @change="updateStatus(scope.row)"
active-color="#13ce66" inactive-color="#ff4949">
</el-switch>
</template>
> 12. 正則
手機号驗證 請輸入正确的手機号 随便11位數字不能通過
validator: checkPhone 校驗
phone: [
{ required: true, message: '請輸入手機号', trigger: 'blur' },
{ min: 3, max: 30, message: '長度在 3 到 30 個字元', trigger: 'blur' },
{ validator: checkPhone , trigger: 'blur' }
],
//校驗手機号的郵箱規則
const checkPhone = (rule, value, callback) => {
//定義校驗手機号的正則文法
const phoneRege = /^1[34578][0-9]{9}$/
if (phoneRege.test(value)) {
return callback()
}
callback(new Error('請填寫正确的手機号'))
}
> 1.字元
/ 轉義 ^ 開頭 $ 結尾
0* >=0 1+ >=1 ? 0 1
例子 reger
8* --- 88
8? --- 8
> 2.區間用法 次數
{n} n {n,} >=n {n.m} >=n <=m
例子
3{3} --- 333 3{3,} --- 3333 3{2.5} ---- 33 ~ 33333
> 3.任意字元
.點 除\n \r 單個字元
[a-z] 範圍
[^xyz] 非xyz
> 4.分組
() 分組 | 邏輯或
xxx.png (jpg|png|gif)
vue-axios demo_user 展示資料 删除 修改 新增
# vue-axios demo_user 展示資料 删除 修改 新增
## vue頁面資料傳遞
表格設計, tbody tr td
--[查]
結果集: axios請求擷取到結果, 指派給 userList數組
擷取一條: v-for(users in userList) 疊代userList擷取每條
展示到td: {{user.name}} / v-text="user.name" 展示到td中
--[删]
擷取要删的資料的id: 每一條資料,後面有删除, 是以可以獲得每條資料各自的id,
執行: 按鈕@click="deleteBtn(user.id)"
方法: deleteBtn(user.id)
--[修]
頁面: 寫要修改的資料的内容頁面 input框 v-show="disU"用于顯示隐藏
資料: 在擷取每條資料時, 跟一個修改 可以直接擷取到每條資料 users
更新按鈕: @click="updateB(users)" 功能 this.user = user;
展示資料: v-model="user.name" 雙向綁定 因為 this.user = user;
送出,執行: updateBtn() 頁面中資料已經是 user
--[增]
頁面: 和update一樣
按鈕: @click="insertB()"
資料: 開始展示資料為空, 添加資料 v-model="user.name" 雙向綁定
送出: insertBtn(user)
> 按鈕
删除 deleteBtn(id) user.id,v-for()得到
更新 updateB(user) user,v-for()得到 展示input
更新送出 updateBtn() this.user,input v-model 雙向綁定得到
新增 insertB() 展示input
新增送出 insertBtn() this.user,input v-model 雙向綁定得到
傳回 returnBtn() div的v-show
清空 clearBtn() 清空input
## axios各種請求
get delete put post
-- [get]
axios請求: axios.get(`http://localhost:8614/user/find`).then(result=>{this.userList = result.data;});
頁面接收: 使用UserList數組
-- [delete]
axios請求: axios.delete(`http://localhost:8614/user/delete/${id}`)
-- [put]
axios請求: axios.put('http://localhost:8614/user/update', this.user)
-- [post]
axios請求: axios.post("",參數) axios.post('http://localhost:8614/user/insert',this.user)
發生的請求: 兩次請求 1.跨域(預檢) 2.403(正常)
資料: 使用的input表單 和put一樣 input v-model="user.name"(雙向綁定)
傳遞的資料: json串
-- [url參數]
params:{}
data:{} 隻能用在post/put
-- [成功]
.then() 箭頭函數可以使用 this.
删除 / 新增 / 修改 之後的查詢 getUserList()放在 .then() 中 --原因異步請求
筆記1
# 2021-02-02
實作網頁 HTML 超文本标記語言
文字,圖檔,視訊,音頻,動畫
ajax爬蟲
#### 1.C/S(word 遊戲) 桌面系統
#### 2.B/S(網站)
浏覽器 B -browser
伺服器 S -server
web中間件 nodejs(javaScript)/tomcat(java)
資料庫 mysql
<div></div>
<img src="a,jpg"/>
### 展示一個網頁
浏覽器通路 chrome 以服務形式,,,啟動了node服務,,端口8848
http://127.0.0.1:8848/web2012/day01-02-02/01-hello.html(常用)
file:///D:/Git/web2012/day01-02-02/01-hello.html
### * 标簽
html,head,body,style,title,
h1-h6,div,span
table,tr,td,
br,hr,img
<meta>
<br/>,<hr/>,<img/>
### * 标簽作用
<meta charset="utf-8"> 字元集使用哪種
title 網頁标題
meta charset = utf-8 亂碼 解決字元集
h1-h6 标題大小
div 塊自動換行
span 塊 實作頁面布局
tr 行
td 單元格
### * 快捷鍵
删除 Ctrl+D
### note
!DOCTYPE html
聲明web 浏覽器關于頁面使用哪個 HTML 版本進行編寫的指令
table 表格中沒有列的概念,是單元格
meta 原資訊
```<table><tr><tb>呂晶</tb><tb>呂晶</tb></tr></table> ```
樣式設計 style
border 邊框
width 寬
align 橫向排列,,,left,right,center
valign 縱向排列,,top,bottom,center
hr 橫線
空格 七個空格等價于兩個漢字
img 圖檔
src 配置圖檔來源,相對路徑,本html檔案所在檔案夾下的圖檔
等比縮放,隻設定寬或高
類class .name
id #name
font-size 字型大小
font-weight 字型加粗
padding 内邊距 上右下左
padding-left right top bottom
padding: 10px 0px 10px 10px;
margin 外邊距
dashed 邊框虛線
solid 邊框實線
# 2021-02-03
### Git
團隊協作代碼管理工具,,團隊5人
pull
git add README.me 工作空間 -> 本地索引(日志資訊)
git add . 變化内容(新增,修改,删除)
git commit -m "commit" 本地索引 -> 本地倉庫
git push -u origin master 本地倉庫 -> 遠端倉庫 master主分支
git push
### 架構圖
執行結構 技術
C/S Client/Server B/S Browser/Server
JSP, html+css+vue
html,css,javaScript,vue ajax ssm mybatis
java對象 json(位元組流,js解析)
### margin和padding
盒子模型
(margin(border(padding(div元素))))
margin 外邊距
padding 内邊距
### table
<>合并表格
橫向 colspan
縱向 rowspan
<>圓角矩形
border-radius:10px;
### 谷歌二維碼
java jar包 生成二維碼
本質,一串字元
點代表什麼
<>下載下傳的jar包,導入java程式中
通知程式,引用jar包
jar包放在lib檔案夾裡
Build Path 建立jar包在java程式中的路徑
使用方法 不需要導包 在同名包下
java.lang 包 不需要導包
package
### css
line-height: 200px;
./images/1.jpg .表示目前路徑
background
### menu
菜單
ul li
list-style: none: 去掉 li 的點
float: left; 浮動 使 li 标簽在一行
li:hover{} 滑鼠經過
### 連接配接
a href="" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow"
target="" _blank 點選連接配接後 怎麼出現網頁 彈出
text-decoration: none; 下劃線
display: inline-table;
塊級元素 展現,以表格形式布局 設定段落生成一個行内框
### 動畫
>拉伸
transition: width 2s; 寬度拉伸2s
.name:hover{width:100px;}
需要配合,滑鼠經過效果(滑鼠經過後變成什麼樣),
transition: 2s;
.name:hover{width:50px; height:50px;}
>移動
animation
>>聲明動畫 在要使用動畫的css樣式中
animation: movebox 2s infinite linear;
movebox 動畫名
2s時間
infinite 循環執行
linear 勻速
>>定義動畫内容
@keyframes movebox{
from{left: 0px;}
to{left: 100px;}
}
動畫執行是在坐标中,需要position
position: relative;
position 位置
relative 相對位置
>旋轉
transform 改變形狀
旋轉,縮放,移動,傾斜
rotate 旋轉 0deg 從0°開始
@keyframes run{
from{ transform: rotate(0deg);}
to{transform: rotate(360deg);}
}
>>滑鼠移入動畫暫停,移出繼續
animation-play-state: paused;
play-state 播放狀态
paused 暫停
放在:hover中
### 音頻視訊
>>音頻
audio
audio src="audio/li.mp3" controls="controls"
controls 音頻控制台
>>視訊
video
video src="video/20170727_121728_4185.mp4" controls="controls" height="300px"
可以使用width height控制視訊的頁面大小
>>相對,絕對路徑
src="audio/li.mp3"
相對路徑:網頁源檔案夾,所在的目錄 目前檔案夾中的 audio/li.mp3
src="D:\Git\web2012\day02\video\20170727_121728_4185.mp4"
絕對路徑:直接指定檔案所在位置,和目前目錄無關
網頁通路形式不能通路視訊
http://127.0.0.1:8848/web2012/day02/audio-video.html
直接打開html檔案
file:///D:/Git/web2012/day02/audio-video.html
### 總結
jar包 導入(放在lib下) 引用(bulid path)
二維碼 導入jar包
CreateQR.make(寬度,高度,網址,生成圖檔路徑)
同名包不用import,java可以識别
audio video
animation transition transform
border-radius
display
# 2021-02-04
transition 拉伸 transition 2s
animation 動畫 animation run 4s linear infinite
@keyframes{from{} to{}}
from 表單
boostrap
javascript 動态網站 腳本語言 弱語言 浏覽器場景
### 表單
h1~h6 标題的大小
label 文本
text radio checkbox select-option button
文本框
input type="text" name="name" id="name" placeholder="請輸入姓名"
placeholder 文本框灰色字 提示資訊
單選
input type="radio" name="sex" id="sex" checked="checked"
checked 預設已經選擇的
多選
input type="checkbox" name="hobby" id="hobby"
下拉
select name="edu" id="edu"
option value="1" selected="seected" 幼稚園 option
select
selected 預設選擇
按鈕
button name="button" 取消 button
name id
document.getElementByName("name")
document.getElementById("id")
在使用js擷取name和id是用到
label span
bootstrap中對label有特性
label屬性for="name"
作用: 光标定位,點選文字會定位到輸入框(輸入框高亮)
name id 重複
name可以重複 id不能重複
但在radio和checkbox中id相同代表 為一組
單選框
radio 圓框 選了去不掉
互斥 name同名隻能選擇一個
name不同名,可以同時選
多選框 checkbox 方框 選了可以再去掉
下拉框
select name id
option 下拉選項
表單送出 送出的值是value值
>>link标簽
外部引入
link type="" rel="" href="" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow"
type類型 text/css
rel樣式表 stylesheet
href路徑 css/bootstrap.min.css
> input css
input[type="test"]
### bootstrap
樣式美化 封裝css3
形成漂亮的界面ui( user interface )
css是浏覽器直接支援的,直接代碼
bootstrap 第三方 預定義class
https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css
菜鳥教程中的bootstrap
.min 意思最小檔案 壓縮(把檔案所有内容換行 空格去掉) 檔案相對小
1)html 頁面引入 css 樣式表檔案
在head标簽中添加 link 标簽,,屬性 rel href
2)在标簽上就可以加入class = "form-group"
class(bootstrap中的class) 看網上手冊 菜鳥教程
container 容器 大的div
form-group
form-control
radio-inline
checkbox-inline
btn
btn-primary
btn-danger
### JavaScript
與java無關
java強語言 幾乎都能幹 C/S B/S(JSP)
javascript弱語言 腳本語言
鄙視鍊 c java c# javascript sql
B/S brower浏覽器
js更新ES5/ES6(主流)/ES7
typescript 向強語言發展
>>js作用
通路網頁元素,可以和背景程式對接,實作前背景貫穿
傳輸背景的資訊不包括美化css,label不包括,表單元素
怎麼拿到元素内容?姓名input框的内容?
體系:DOM(頁面元素擷取,編輯)、BOM(浏覽器控制) DOM document object model 文檔對象模型 BOM browser object model 浏覽器對象模型
javascript會把html頁面整個抽象,去除雜質,頁面元素(div/input/button...) 形成tree樹,DOM樹, 為什麼要抽象出DOM樹?為了頁面元素快速定位,擷取它資訊 網頁html解析,從上到下,從左到右,頁面button,76行,按順序解析性能低; tree樹 document就是樹根,它代表整個html頁面 頁面上的所有元素就被抽象成tree樹上的節點node 樹形結構一旦形成,它檢索資料速度遠高于html順序解析
js注釋 和 java 一樣 //
js中的字元串 單引号 雙引号 都可以
引入js檔案使用 < script src="js/"></ script>
type="text/javascript" 可省略 預設
src="" 引入外部js jquery.js
在script标簽中寫js的内容 < script>js内容< /script>
>>在浏覽器頁面中顯示
1.彈窗
window.alert(); alert();--BOM中提供的api
2.檢視源代碼f12
console.log(); --Chrome 提供的方法
>>4種方式 擷取a标簽内容 dom.html
1. tag
對應的是a标簽 參數為a标簽 傳回所有a标簽的數組
document.getElementsByTegName("a");
document.getElementsByTegName("a")[0]; 得到第一個元素
document.getElementsByTegName("a")[0].innerText; 得到元素的内容
document.getElementsByTegName("a")[0].href; 得到元素的連結
2. classname
對應的是a标簽中的 class屬性 參數是class的值 傳回所有class屬性一樣的 數組
document.getElementsByClassName("jd");
3. name
對應的是a标簽中的name屬性 參數是name的值 傳回所有name屬性一樣的 數組
document.getElementsByName("pdd");
4. id
對應的是a标簽的id屬性 參數是 id的值 傳回一個值 js書寫中規定id為唯一的
document.getElementByClassId("cgb");
>>修改頁面中的值(顯示的)
擷取到原來的值 再指派
document.getElementByClassId("cgb").innerText = "呂晶";
document.getElementByClassId("cgb").href = "呂晶";
>> 連結a 幾種通路形式 css樣式
a:link{} 未通路過的樣式 隻在第一次重新整理頁面時有用 通路過之後都是vidited
a:visited{} 通路過的樣式
a:hover{} 滑鼠滑過的樣式 為了效果必須放在link 和visited後面
a:active{} 滑鼠點選時的樣式
>> 定義變量
->>var var a = "521";
适用于定義所有的變量類型,var a="lvjing";
在使用var定義後 還可以重新使用var定義 重新定義後會覆寫掉原來的
var a="lvyingying";
typeof() 檢視變量的類型
var定義變量,代碼塊 {var a = "10000";} 如果代碼塊之前定義過a 會覆寫
->>let
let b="1000"; 定義變量
代碼塊中使用let定義變量 {let b="500";} 出了代碼塊變量就釋放了(彈出棧了)
let 精度高
-const
常量 const m="lvjing";
定義後不能再指派
>>函數
->普通函數
var f = function(){console.log("123456");} 定義 f(); 調用
var f = function(a){return a;} f(10);
var f = function(a,b){return a+b;} f(10,20);
->箭頭函數 arrow function
var f=()=>{console.log("123456");console.log("456798");}
var f=()=>console.log("456798"); 隻有一條執行語句
var f=(a)=>{return a;} f(10);
var f=(a,b)=>{return a+b;} f(10,20);
var f=a=>return a; 隻有一個參數和一條執行語句
>>datatype
字元串,整形,布爾,數組
var a = "lvjing";
var a = 123;
var a = true;
var a = ["123","456","789","123456","456789","789456"];
>通路數組
a[0]第一個元素 a[a.length-1] 最後一個元素
>>對象
var lv = new Object();
lv.name = "lvjing";
var car = {
name: "保時捷718",
age: "30",
f1:function(){
return this.name+this.age; 使用this通路對象中的屬性
}
};
>動态增加屬性
car.price = "123";
car.f2=function(){
return car.name+car.age;
}
>>this
this的最終指向的是那個調用它的對象
var o = {
a:10,
b:{
a:12,
fn:function(){
console.log(this.a); //undefined
console.log(this); //window
}
}
}
var j = o.b.fn;
j(); 在這裡調用this的是j而不是fn,j隻是等于fn這個函數
var j = o.b.fn();
在這裡j是fn執行後的結果,this被fn執行
form
dom
var
arrow-funcation
datatype
car
# 2021-02-05 day04
js 必須會 隻局限于浏覽器
es6 維護js标準化 ECMAScript
js的衍生 1. aiax(必須 請求(把頁面發送給後端java) 依賴js)
2. json(必須 傳回 不依賴js)
3. typescript 可以存本地檔案 +nodejs服務 可以修改本地
#### bootstrap
第三方推特發明 是一套css樣式表,使定義規範化
記憶規範,根據demo學習,查找要實作的效果在bootstrap中怎麼用的
各種class bootstrap 優化頁面
1.栅格體系 可以适應PC端 移動端
2.适應主流浏覽器,相容性
借鑒bootstrap發展了element-UI(餓了麼)
#### js
文法,api
BOM Browser Object Model
DOM 樹 Document Object Model 代表html頁面
樹形結構,檢索快,效率高
隻關心表單(關鍵)元素,隻向背景送出主要内容(呂晶 姓名不送出)
根據掃描,形成dom樹 按元素類型
無法預估元素類型,就形成數組elements
頁面隻有一個,數組個數為1
通路
tagName,className,name,id
doucument.getElementsByClassName
doucument.getElementById
radio 送出的是男或女
checkbox 送出數組 ["123","456"]
開發時使id唯一,便于使用
es6
js中var,Object
es6是js的高版本 block scoping 塊域,變量定義使用範圍更小,釋放快
let,const(不允許修改),{}
1. var a = function(){} var a = function(arg){return arg;}
var a = () => {} arrow function 知識簡化js函數,不能完全替代
var a = (arg) => {return arg;} var a = arg => arg
2. 數組var a=["1","2"];
3. 對象var a={name:123,age:25}; key:value,key:value
對象中函數 var a = {b:function(){},c:()=>{}}
對象定義中傳統函數的this代表整個對象,,,箭頭函數中的this是window的對象
動态增加對象的函數
a.b1=function(){this.name} this代表本對象
a.c1=()=>{this.name a.name} this代表window對象,使用a代表本對象
this 在普通函數中代表目前對象 this 在箭頭函數中代表window對象
java 靜态語言,編譯時查錯,運作前保障程式的安全性
js 動态語言,邊解析邊執行,動态添加屬性方法,靈活,,,,,缺乏安全(黑客可以改内容)
alt+/ 提示
> css居中
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
#### bootstrap
class="container" 最外面大盒子修飾 給盒子大小後會水準居中
class="form-group" 大盒子
for="username" 輸入框外文字修飾
class="form-control" 輸入框input修飾
autocomplete="off" 關閉自動完成,輸入框不彈出之前使用的内容
class="btn btn-primary" 按鈕修飾 button
onclink = "save()" 按鈕事件 單擊觸發裡面的函數 函數自定義
function save(){let username = document.getElementById("username")}
擷取對象中的元素(不同的标簽調用不同的字段)
div.innerText a标簽a.innerText input.value
### jquery
第三方 改變了js寫法,新機制,代碼更簡介
js标準,jquery民間标準,替代js
anglarjs,react,vue js架構,更厲害 vue基于js和jquery
vue阿裡收購,
js jquery
document $()
document.getElementsByTagName("a") $("a")
document.getElementsByClassName("a") $(".a")
document.getElementsByName("a") $("input[type='text']") $(":text")
document.getElementById("a") $("#a")
input.value $("#a").val()
div.innerText $(#a).text()
1)簡潔
2)選擇器 文法:$(select).action()
select選擇器 .username(class) #username(id)
action() 動作 函數
導入 <script src="jquery"></script>
jquery提示 文法提示庫左鍵 jquery1.8
fieldset legend```
<fieldset><legend>登入</legend><div>内容</div></fieldset>
登入外面的大框```
>>儲存 取消 按鈕
儲存 擷取輸入的使用者名密碼 取消 清空輸入框
1.js
使用按鈕中設定的onclick功能 onclick="jssave()" onclick="jsclear()" 點選按鈕觸發方法
定義方法
function jssave(){console.log(document.getElementById("username").value);}
function jsclear(){document.getElementById("username").value="";}
2.jQuery
前期綁定 使用 按鈕中設定onclick功能 點選觸發方法
定義方法
function jqsave(){console.log($("#username").val());}
function jqclear(){$("#username").val("");}
後期綁定 設定按鈕id 擷取按鈕 設定點選事件 .click(匿名函數)
$("#btnSave").click(function(){console.log($("#username").val());})
$("#btnClear").click(function(){$("#username").val(""));})
---設定按鈕的屬性 點選之後不允許第二次點選
在定義按鈕功能中設定 attr(設定或傳回) attr參數 name value
disable 對按鈕設定時 會禁用按鈕 預設為false
$("#pay").attr("disabled",true);
--checkbox 全選 取消全選
複選框,設定全選和取消全選按鈕 button
使用jq中的.click方法設定點選事件
jq中的checked(預設選中)屬性 true全部選中 false取消全選
$("#selectAll").click(function(){$("[id=hobby]").prop("checked",true);})
$("#unSelectAll").click(function(){$("[id=hobby]").attr("checked",false);})
在去選中attr隻能使用一次,是以用prop 在取消全選中,attr可以使用多次
### json
交換資料 兩台計算機通訊 計算機+網絡TCP/IP
txt (10,20,30)明文資訊不安全
xml (< price>10< /price>)自定義标簽,标簽量大,造成網絡傳輸資料量增加,性能低
json []數組 {}一條記錄 "key","value"屬性 值 表示字段,資料
京東擷取某個商品100003717483的價格
請求連結:
https://item.jd.com/100003717483.html 商品詳情
https://p.3.cn/prices/mgets?skuIds=J_100003717483 商品價格
json字元串:
[
{
"p":"2499.00",
"id":"J_100003717483",
}
]
JSON 對象 把字元串變成js對象 JSON.parse()
通過對象擷取内容
<span id="itemId"></span>
var item = JSON.parse(jsonstr);
$("#itemId").text(item[0].id); 傳回取到的值
### ajax
送出請求 https://p.3.cn/prices/mgets?skuIds=J_100003717483
請求網站 ajax送出請求(相當于浏覽器發起請求) 京東伺服器響應
在内部進行查詢,商品資訊,轉換為json字元串傳回
>>jquery.ajax參數
type:GET/POST 連結形式的差異
url:連結 位置
data:參數對象 資料
contentType:發送請求格式 application/json;charset=utf-8;
dataType:傳回的資料格式 json/jsonp跨域(京淘項目)
success:通路成功(data) data就是傳回的json對象
error(e):通路出錯,網站傳回錯誤資訊
請求
GET json/jsonp
POST jsonp data中的資料 在data中寫 或者 在url中包括 或者 都有 都可以
#### 小結
1)jQuery 封裝了js 更簡介 $() api
$("selector").action() 選擇器
2)json 字元串 遠端資料傳輸 資料交換格式
[數組] {一條記錄} key:value屬性值
3)ajax 參數
# 2021-02-07
>>jQuery
封裝了js api
document.getElementsByTagName("a"); $("a");
document.getElementsByClassName("a"); $(".a");
document.getElementById("a"); $("#a");
Vue 隻關心資料和業務
>>json ********
xml <name>lvjing</name><age>23</age>
json {name:"lvjing",age:23} 一條記錄
[{name:"lvjing",age:23},{name:"zhaoqing",age:24}]
擷取 記錄[{},{}]
json可以表達多重對象,,,{}中可以使對象
json和java Object,php,c#
>>ajax
js是互動,,對頁面内容擷取,設定
ajax 前台(h5+css+js)與背景(維護資訊,店小二)資料連通(把前台資料送出到背景,把背景的資料在前台展示) ajax中間傳遞
js(xmlHttpRequest、xhr對象)推出ajax這個技術,可以把前台(h5+css3+js使用者看頁面,商品頁面) 和背景程式(維護資訊,店小二操作頁面)連通。 (把前台資料送出背景,把背景傳回資料在前台展示)ajax就負責中間傳遞 ajax把一個使用者請求發送到後端(京東),京東背景伺服器接收到這個請求request,再去通路背景程式, 背景程式處理,把某個商品的價格資訊傳回,把傳回資訊封裝成json字元串,ajax拿到傳回值, 把它在轉換成js對象。success(data)就封裝到成功函數的data參數中。頁面就可以對data進行解析, 最終把id和p展示在頁面上。
ajax請求request->後端->通路後天程式->傳回資訊封裝為json字元串->ajax拿到傳回值->轉換為js對象
成功擷取 success(data) 解析data 資訊在頁面上展示
>>jQuery.ajax(背過)
https://p.3.cn/prices/mgets?skuIds=J_100003717483
type:GET/POST 請求
url:通路位址 資料存儲位置
data:{"skuIds":"J_100003717483"} js對象 資料key:value
contentType:請求類型 application/json;charset=utf-8;
dataType:響應類型 json/jsonp跨域(一個網站通路另一個網站會發生跨境 限制)
success:function(data){
//參數是一個函數,代表網站成功處理并且傳回
//data網站背景成功處理後,把結果封裝到data對象中,背景傳回json字元串,内部轉換變成js對象
//JSON浏覽器直接支援,JSON.parse(jsonstr)
//注意這個傳回data是一個數組還是單個對象
console.log(data),如果最外層是[]就代表傳回是數組,如果最外層傳回是{},就代表是一條記錄
items[0] 第一條資料,items[1]。。。
item
}
error:function(e){失敗資訊}
>>>>ajax json
>>GET/POST 差異
https://p.3.cn/prices/mgets?skuIds=J_100003717483
手寫參數
https://p.3.cn/prices/mgets
自動拼接表單元素 形成串
網站請求的兩種方式 HTTP規範
1) GET參數拼接在URL後 參數 第一個使用? 之後的使用&
jdbc:mysql://localhost:3306/mysql-db?charset=utf8&severTimezone=Asia/Shanghai
2) POST 參數不能直接在浏覽器輸入,使用form,搜集表單元素(input/select)
形成一個串,
get手寫 form自己拼接
ajax
data參數
>>script腳本
head body中 body後 html外
邊解釋邊執行,上到下 左到右
先後加載順序
按鈕 先加載按鈕 在加載按鈕的操作 script放在定義按鈕後
把script放在引用頁面元素之後
jquery ready() js建構完動漫樹後觸發
>>jQuery ready()
$().reasy(匿名函數)
$(匿名函數)
$().reasy(function(){})
$(function(){})
>>Vue
前端架構,級别很高
hello vue
第三方技術 js檔案 引入
自己的文法 new Vue()對象
div id="app" vue操作區域進行資料渲染
# 2021-02-18
### vue
特點:資料驅動,元件化
是一套漸進式的架構,使用必須是全套
五個部分*************************
>>>開發vue頁面步驟:
1. 單獨導入vue.js
2. 按vue的文法結構寫代碼,少量api new vue()
3. body中加一個div,所有内容要寫在這個div中,id="app"
挂載點el 內插補點表達式 資料data
內插補點表達式:兩個大括号括起來值必須在data中進行定義,就可以通路,這個寫法插值表達式
div id="app" {{msg}}
new Vue({el:"#app",data:{msg:"hello lvjing"}});
View ViewModel Model MVVM架構(Vue)
api分水嶺,死的(隻是包裝了)
架構中有思想
>>建立vue檔案模闆
建立-自定義模闆.複制要使用的模闆
>>>雙向綁定 View Model
input type="text" id="address" v-model="address"
使用指令v-model在input中操縱資料,可以改變view中的值
vue
1.操縱view model随之變化
2.操縱model view也會變化
>>data 三種形式
1.對象 data:{msg:"lvjing"}
2.函數 data:function(){return {msg:"lvjing"}}
3.es6(類似函數) data(){return {msg:"lvjing"}}
>>調試錯誤
f12 浏覽器調試視窗 console(js,vue錯誤資訊)可以看到第幾行錯誤
SyntaxError 文法錯誤
二分法處理錯誤, 通過運作各部分代碼查找 錯誤代碼區域,定位到錯誤
>>函數
methods:{say:function(){}}
>>按鈕中調用方法
>>git 克隆
遠端倉庫複制到本地
一般是克隆别人的,看代碼 克隆項目組
本地備份
指令
git clone 倉庫位址
在要存放的本地目錄下 git bash 執行
git clone https://gitee.com/nutony/res.git
>>>網頁小技巧
寫過JSP頁面,java代碼和html交融,混雜一起,
怎麼把java代碼轉換html一些内容 技術JSTL TAG庫,起到翻譯作用。
vue通過指令把vue資料翻譯成html代碼
v-model,v-on:click(@click)
v-cloak,v-show,v-if,v-else,v-else-if
v-for,v-on,v-bind
>>v-cloak
頁面的選擇器,有屬性就執行樣式
特殊效果,螢幕頁面晃動
f12-network-online slow 3G
內插補點表達式頁面有明顯晃動,加載中會顯示原來的對象内容(是以晃動)
先加載頁面,加載vue對象,才開始解析,最終替換頁面中的內插補點表達式(渲染)
解決:加一個樣式,把頁面值div id=app 整個div藏起來, display:none; 等Vue加載完畢,在把它展示!
[v-cloak]{display:none;} 這個指令頁面選擇器,有這個屬性就執行這個樣式
div v-cloak
>>v-show,v-if,v-else,v-else-if
是否成年,age
v-show 展示與不展示,條件成立的展示,不成立的隐藏了
v-if 不成立的條件直接去掉了
性能 頻繁之後show性能高
分支結構 if else 隻經過條件成立的語句
>>v-for
類似于java中的foreach循環,in後面就是集合,o代碼每次周遊的目前值
o,i o代表目前行内容,i代表目前索引值,注意順序,vue定死順序
v-for="o in hobby" {{o}}
v-for="o.i in hobby" {{i}}-{{o}}
>>v-on
**button 事件
v-on:click="show"
v-on:click="show()"
@click="show"
>>v-bind
當插值表達式用作屬性值時,v-bind可以使 插值表達式作為vue變量
<a :href="site.url" target="_blank" rel="external nofollow" >{{site.name}}</a>
>>v-text v-html
v-text 純文字輸出
v-html 會翻譯data中資料的html标簽
div.innerText div.innerHtml
>> 指令沒有晃動,指令配合頁面标簽
### vue漸進式架構
1.隻引入vue.js
2.vue.js+vue項目(加載 依賴包,插件(直接拿别人的來用))
組織第三方插件,規範 npm+webpack 打包工具 nodejs
項目,結構 限制(用的别人的東西, 把别人的組織起來)
>>步驟
nodejs web中間件 翻譯解析開發語言 js/jq/vue 容器 小項目
tomcat web中間件 翻譯解析java springmvc+spring+mybaits 大項目
nodejs是基于chrome浏覽器核心 解析js最快服務
需要js庫 引入 npm管理第三方js庫(jq.vue.element-ui)
webpack 小項目拷貝 大項目(環境) 打封包件
nodejs解析 npm管理js庫 webpack打包
>>vue-cli 腳手架
1.驗證nodejs node -v
2.npm 鏡像 阿裡的
npm切換到淘寶鏡像方式:
npm config set registry https://registry.npm.taobao.org
檢視:
npm config get registry
3.安裝腳手架
npm install vue-cli -g #安裝vue-cli腳手架
install 安裝 vue-cli (vue-client縮寫 vue用戶端 vue.js) -g 全局安裝
npm uninstall vue-cli -g #解除安裝vue-cli腳手架
vue # 展示幫助提示
vue --version # 2.9.6
vue –V
where vue #vue安裝在哪裡
如果指令出錯Err,不是警告warn,重新執行指令(網絡不穩定)
如果報權限不足,安裝nodejs時要以管理者賬号來安裝
>>安裝vue項目
1.找個目錄
->vue init webpack jt 此處項目名不能使用大寫
建立jt項目,
Project Name 項目名稱,預設,回車
Project description 預設,回車
Author chenzs 作者
vue build 預設,回車
install vue-router? 是否安裝router,輸入:y 安裝
Use ESLint to lint your code? 規則引擎,過于嚴苛,輸入:n
Setup unit tests? 單元測試,輸入:n
Setup e2e tests with Nightwatch(Y/n)? 測試架構Nightwatch,輸入:n
Should we run 'npm install' for
you after the project has been created? 預設npm,回車
成功後 啟動服務
->cd jt
->npm run dev 進入京淘項目
Your application is running here: http://localhost:8080
http://localhost:8080 通路
>>>>>>>>>安裝執行代碼
安裝nodejs
node -v
npm config set registry https://registry.npm.taobao.org
npm config get registry
npm install vue-cli -g
vue --version
vue init webpack jt
cd jt
npm run dev
最後:Your application is running here: http://localhost:8080
>>>>>>>>vue項目結構
node_modules 臨時目錄,自己管理,第三方js 依賴
src 源檔案目錄 *.js *.vue
static 靜态資源 vue檔案規定檔案存放位置,圖檔 css js
index.html 首頁 localhost:8080
package.Json 配置檔案 全局配置 index.html 調用哪些檔案
webpack.dev.conf.js 全局配置檔案
src/main.js
new Vue({
el: '#app', 挂載點
router, 路由
components: { App }, 元件(省略字尾) APP.vue
template: '<App/>' 模闆
})
src/App.vue
三個結構
<template>html+vue(動态網站) view</template>
<script>vue js 操作頁面資料 model</script>
<style>元件的獨立修飾</style>
預設內建子元件
自己寫的所有元件在App.vue中
src/components/HellowWorld.vue
>>>>>>>>>總結
看不到底層在做什麼
>>Vue
本質是就是封裝js,jQuery,在代碼中已經看不見了
壞處:不知道底層在幹嘛?不夠透,在大型項目中,不可能所有細節都自己做,提倡“拿來主義”
ssm,都是拿來别人的東西spring拿mybatis,springcloud微服務,網飛,阿裡
好處:Vue資料驅動,屏蔽底層js的api,無需去記憶這些晦澀難懂難記東西,隻需要操縱資料!
減輕開發者工作量,為做大型項目
>> Vue和js、jquery細節差異
擷取頁面上輸入框
```<input type="text" id="address" v-model="address"/> ```
js.api documet.getElementById("address").value = "123";
jQuery.api $("#address").val("123"); 标新立異,創造新的東西,額外記憶
vm.data.address
address= "123";
>>Vue中有什麼東西?
1)結構:死的結構
View 視圖,頁面展示内容:a. 插值表達式{{msg}}、b. 标簽上加指令 <p v-for=""></p>
Model 模型,資料
ViewModel 視圖模型,把視圖和資料綁定起來,Vue對象,内部完成解析過程
衍生出:MVVM架構
2)
View, 規定頁面body中加div,預設修飾app,習慣,Vue對其進行解析,動态網站
Model,資料來源:el(element)挂載點、data資料、methods函數
>>Vue 提供很多指令,形成動态網站
v-model 雙向綁定
v-show、v-if、v-else-if、v-else,判斷語句
v-for,循環語句
v-on,@click,單擊事件
v-bind,:href="url" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" ,url不是字元串,而是資料的變量名稱
v-text、v-html,text純文字,裡面有html标簽不解析,html會解析标簽
>>Vue是漸進架構
1)簡單的vue,直接引入vue.js
2)大型項目vue項目,
a. nodejs(web中間件,啟動服務)/
b. npm 依賴js插件
c. webpack打包,編譯過程(儲存、重新啟動)壓縮
d. vue-cli 腳手架
## 任務:
1、搭建環境
2、修改HelloWorld.vue,頁面展現”京淘電商平台“,改成紅色
# 2021-02-19
js 實作 浏覽器增強互動
jquery 簡化,優化 js代碼 本質是js之上,小的格局變化,根本沒變 dom樹
Anglur 網絡 TCP/IP分層協定 後端 j2ee mvc 三大架構
Anglur開了架構的先河,分層概念TCP/IP分層7層協定(網絡,硬體+軟體),j2ee架構分層概念,MVC架構,三大架構,微服務
大前端 reactjs vuejs
架構 : 已經實作了基礎的架構, 開發人員的代碼量減少 **能更加注重業務實作
在架構的基礎上實作自己的業務,無需更細緻的寫代碼
現在關注是 架構如何實作的功能
架構思想應用,漸進式,資料驅動(data, 插值表達式, 标簽的屬性),元件化(代碼複用)
自己做架構 别人是如何實作的 ()()()把vue學透 怎麼做到的
>>> vue.js 漸進式
vue.js, 元件化, npm管理依賴(js庫), webpack打包工具
>>> 資料驅動
架構 存在限制.
檔案名 目錄components/Item.vue App.vue引入元件
按規定寫好的 自動連入整體項目 約定大于配置
資料驅動 學習的關注點 js的api -> 結構(代碼放在哪,文法結構)
MVVM架構
寫資料就放模型Model的位置,寫頁面展示放視圖View的位置,剩下事情VM去做(vue它連接配接模型和視圖,渲染)。
>>> vue實作機制
Vue對象結構
el挂載點, data資料區, methods函數區
注意: data中資料寫法, methods中函數寫法
>>> Vue資料展示
js/jq 操作dom樹,更新頁面
雙向綁定: Vue, 頁面改變 <--> 資料改變
1)插值表達式: {{msg}} Vue底層周遊{{msg}} , 在資料區查找對應的變量, 使用變量值替換
2)v-指令集: vue編譯之後把對應的指令翻譯成html語句,
v-show,v-if,v-for, ....
#### Vue項目 工程 ########### 很重要
1. 自己添加元件 圖書: title,sellpoint,price,intro
2. 商品管理 新增,修改,删除,清單 CRUD
3. element-ui
>>>>寫自己的元件
1.定義元件: src/compinents/Item.vue
2.注冊元件: App.vue 在其中引入Item.vue
3.使用元件: <Item></Item> 标簽 Vue就會翻譯為<template>中的内容
export default{} 隻供本元件使用
>>引入element-ui
有一系列的元件ui
布局 表單 表格 對話框 輸入框 文本域
業務邏輯
新增 修改 删除 清單 如何聯系起來
資料使用資料庫 對象數組
>>>
1.定義元件: src/compinents/Item.vue view data methods
2.注冊元件: App.vue
script 在其中引入Item.vue
導入 import Item from "./components/Item.vue";
components選項, App.vue 根元件下有哪些元件
export default { components:{Item} }
3.使用元件: App.vue template div <Item></Item>
>>> 引入element-ui
安裝
https://element.eleme.cn/#/zh-CN 元件
npm管理第三方插件 (元件)
安裝 npm i element-ui -S
i 安裝install element-ui 插件名 -S 安裝生産環境
-D 開發環境
引入項目
修改main.js 元件導入方式 全局(其他也可以調用)
import ElementUI from 'element-ui'; 引入ui
import 'element-ui/lib/theme-chalk/index.css'; 引入css
Vue.use(ElementUI); 使用元件
>>>>栅格設計
為了适合pc端和手機端 螢幕分為24列
<el-row></el-row> 布局标簽
>>>>>>>>> jt/src/components/Item.vue
el-row 布局标簽 為頁面中的行 24列
>-* 在頁面中 設定添加按鈕
el-button
>-* 設定表格展示内容
table column列
在data中設定表格已有資料内容 數組對象 list:[{},{},{}]
頁面中設定 操作, 修改 删除 按鈕
>-* 添加按鈕 彈出對話框
設定對話框
按鈕功能 彈出對話框 toadd
給添加按鈕設定點選事件
>-* 對話框
内容
按鈕 确認 save 取消
dialogVisible (用來顯示或關閉對話框) data中設定資料預設為default不顯示
:visible :visible.sync="dialogVisible" 後面的是個變量
用來顯示和隐藏一個彈框
>-* form表單
添加資料
彈出對話框 中 設定form表單(對應頁面資料内容) 輸入内容
設定預設資料 m
:model="m" 綁定
>-* 點選 确認 按鈕 儲存輸入資料到頁面中
設定确認按鈕事件 方法save
新增 修改 删除 splice
同時關閉對話框
>>>>數組新增,修改,删除
splice() index 索引(在哪裡改動) howmany 删除幾個 item 添加的元素(可變元素)
list.splice(0,0,"lv") 新增
list.splice(2,1,"jing") 修改
list.splice(2,1) 删除
在表單中輸入内容
點選确認 資料添加到頁面中,同時關閉對話框
>-* 删除
每行周遊 有索引值index
Vue插槽slot-scope 提供變量s
s.$index 代表目前行索引值
s.row 代表目前行資料 (list[2])
list.splice(index,1)
template slot-scope="s" @click="del(s.$index)"
設定del方法删除資料
>-*修改
1.擷取目前行index 擷取目前行資料row 把m資料去變量 this.m=row
2.對話框 回顯 form表單與回顯對話框中的資料關聯 :model="m"
3.點選确定按鈕,save方法,加參數具體值m,修改頁面值,它通過雙向綁定,就改變資料區m中屬性 儲存這個值,splic函數
4.設定一個變量,isUpdate,是否修改
新增:isUpdate=false;修改:isUpdate=true
新增和修改是公用save方法,通過這個參數調用不同splice,if判斷
修改按鈕設定點選事件 方法toupdate 傳參s.$index,s.row
定義方法toupdate
直接把臨時資料m設定為 row
打開對話框 顯示的内容是目前行的資料
副作用
**點選确認 是新增 **修改form表單時 table中的内容也變 ***字型不一樣
**點選确認 是新增
解決方法:
設定一個變量,isUpdate,是否修改
新增:isUpdate=false;修改:isUpdate=true
新增和修改是公用save方法,通過這個參數調用不同splice,if判斷
全局變量 index 在點選确認按鈕時,splice的索引值
**修改form表單時 table中的内容也變
解決方法:
巧妙實作,利用js提供JSON方法實作!
JSON js子集,浏覽器直接支援文法
JSON.parse() //把json字元串轉換js對象
JSON.stringify() //把js對象轉換json字元串
this.m = row js對象 this.m = JSON.parse(JSON.stringify(row));
//經過2次轉換,建立新對象 new Object() 不同的引用,
修改form表單框中内容,this.m,這時和頁面row就沒有關系
**字型不一樣
style中設定 textarea font-family:"微軟雅黑";
>>>>>
export default{
name:"Item",
data(){},
methods:{}
}
>>>>>SPA
現在主流方式單頁面SPA,Vue架構推崇單頁面,不用重新整理