1.はじめに:プロジェクトのルフィの概要すべての知識(知っています)
VUEフレーム:フロントインターフェース、論理ページ
1)命令
2)実施例のメンバー
3)成分
4)プロジェクト開発
DRFフレーム:データ(インタフェース)
1)基本モジュール:要求、応答、解析、レンダリング、
2)、3つの認証のシーケンス
3)ソート、検索、フィルタリング、ページ
4)異常な、サードパーティのJWT、安らかインタフェース仕様
ルフィ項目:台湾の前と後の分離プロジェクト
1)プロジェクトのログイン認証、カリキュラムの販売機会、プロジェクトの完了
2)SMS、アリペイ、サーバー、オンライン、Redisの、セロリ、gitの
導入2.Vueフレームワーク
JavaScriptのプログレッシブフレームは:定義されている1)
プログレッシブ:ラベルは、ページを制御することができ、あなたはまた、一連のラベルを制御することができ、あなたはまた、ページ全体を制御する、あるいはプロジェクト全体の受信を制御することができます
2)利点:
命令(分岐構造、環状構造、...)、多重構造のページには、
インスタンスメンバー(フィルタ、モニタ)は、第2データフォーマットをレンダリングするために行うことができる有する
高速、成分(多重化またはモジュールの組み合わせ)とアップページセット
の仮想DOMの
データを、双方向結合
単一ページのアプリケーションの
データ駆動型
3)なぜ勉強VUE:
フロントフレームワーク:角(巨大)、)(堪能携帯端末に反応、ヴュー(軽量、最初の二つの利点を描く)
Vueのは独力文書は中国であり
、フロントとバックオフィスの開発の分離を達成、開発を保存することはコスト
4)でここでの使用
分離段階開発プロジェクト(PC、モバイル端末)の表裏
「」」 1)CDN <スクリプトSRC = "https://cn.vuejs.org/js/vue.js"> </ SCRIPT> 2)ローカル導入しました <スクリプトSRC = "JS / vue.js"> </ SCRIPT> 「」」
VueのVueが公式サイトからダウンロード
ヒント:ダウンロードのルートにブラウザから閲覧することができますが、上記のコードでの公式ウェブ経路のCDN
「」」 / **エル:マウントポイント * 1)マウントポイントは、ページ構造(構造にマッチング)を制御することができます * 2)厳密に(id属性でアプリを使用するのが一般的に一致するように推奨ページタブをマウントするマウントポイント) * 3)は、HTMLタグとタグ本体をマウントポイント(HTMLタグ・ボディとして使用することができず、交換することができない、構成要素)について詳細に説明しました * 4)コンテンツが対象VUEの決定であるかどうかだけで外の世界へVUEオブジェクトを受け入れるかどうか * / 「」」
< DIV ID = "アプリ" > < divのクラス= "D1" > {{A}} </div> <div class="d1"> {{ num }} </div> </div> <div id="main"> {{ n }} </div> <script> var app = new Vue({ el: '#app', data: { num: 100 } }); console.log(app.$data.num, app.num); new Vue({ el: '#main', data: { n: app.num } }); </script>
""" /** 插值表达式 * 1)空插值表达式:{{ }} * 2)中渲染的变量在data中可以初始化 * 3)插值表达式可以进行简单运算与简单逻辑 * 4)插值表达式符合冲突解决,用delimiters自定义(了解) */ """
<div id="app"> <p>{{ info }}</p> <p>{{ msg }}</p> <p>{{ }}</p> <p>{{num}}</p> <p>{{num + 10 * 2}}</p> <p>{{ msg.length + num }}</p> <p>{{ msg[4] }}</p> <p>{{ msg.split('')[4] }}</p> <p>[{ num }]</p> </div> <script> new Vue({ el: '#app', data: { info: '信息', msg: 'message', num: 10, }, // 控制vue插值表达式符合 delimiters: ['[{', '}]'], }) </script>
""" /** 过滤器 * 1)用实例成员filters来定义过滤器 * 2)在页面结构中,用 | 来标识使用过滤器 * 3)过滤方法的返回值就是过滤器过滤后的结果 * 4)过滤器可以对1~n个变量进行过滤,同时还可以传入辅助的变量, * 过滤器方法接受参数是安装传入的位置先后 */ """
<body> <div id="app"> <!-- 简单使用:过滤的对象会作为参数传给过滤器 --> <p>{{ num | add(20) }}</p> <!-- 串联使用:将第一个过滤器结果作为参数给第二个过滤器 --> <p>{{ num | add(100) | jump(2) }}</p> <!-- 究极使用 --> <p>{{ n1, n2 | fn(99, 77) }}</p> <!-- 你品,你细品 --> <p>{{ n1, n2 | fn(99, 77), n1, n2 | fn(100) }}</p> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { num: 10, n1: 66, n2: 88 }, filters: { add: function (a, b) { console.log(a, b); return a + b; }, jump: function (a, b) { return a * b }, fn: function (a, b, c, d) { console.log(a, b, c, d); return a + b + c + d; } } }) </script>
5)方法:methods自定义vue控制的方法,给事件指令绑定的
以上所学实例成员(实例属性,自我完成小结)
{
el:
data:
delimiters:
filters:
}
""" /** * 1) v-* 是vue指令,会被vue解析,v-text="num"中的num是变量(指令是有限的,不可以自定义) * 2)v-text是原样输出渲染内容,渲染控制的标签自身内容会被替换掉(<p v-text="num">123</p>会被num替换) * 3)v-html可以解析渲染html语法的内容 */ 4)补充 <!-- js基本数据类型:字符串、数字、布尔、undefined --> <p v-text="'abc' + num + 10"></p> <p>{{ 'abc' + num + 10 }}</p> """
<body> <div id="app"> <p>{{ num | add(300) }}</p> <p v-text="num"></p> <p v-text="num">123</p> <p v-text="info"></p> <p v-html="info"></p> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { num: 100, info: '<i style="color: red">info内容</i>' }, filters: { add: function (a, b) { return a + b; } } }) </script>
3)v-on:
v-on:事件="方法" => 系统传参,只默认传$event
v-on:事件="方法($event, ...)" => 完全自定义传参,可以手动传入$event
""" /** * 一、数据驱动 * 1)操作是一个功能,使用需要一个方法来控制 2)方法名是变量,所以控制变量就可以控制该方法 * * * 二、事件指令 * 1)在实例成员methods中声明事件方法 * 2)标签通过事件指令绑定声明的方法: v-on:事件名="事件方法名" * eg: <button v-on:click="btnClick">按钮</button> * 3)标签通过事件指令绑定声明的方法,且自定义传参: v-on:事件名="事件方法名()" * eg: <button v-on:click="btnClick()">按钮</button> 不传任何参数 * eg: <button v-on:click="btnClick($event)">按钮</button> 传入事件对象,同不写() * eg: <button v-on:click="btnClick(10)">按钮</button> 只传入自定义参数,当然也可以传入事件对象 */ """
<body> <div id="app"> <button v-on:click="btnClick">{{ btn1 }}</button> <button v-on:click="btnClick">{{ btn2 }}</button> <hr> <!-- 直接绑定事件名:系统会在触发事件时(点击时)调用事件方法(fn1),传给事件方法一个参数(事件对象) --> <button v-on:click="fn1">按钮3</button> <!-- 绑定的事件名后跟着(),不是主动调用事件方法,而是表示在触发事件调用时,传入的参数全由用户自己决定 --> <button v-on:click="fn2($event, 10, 20)">按钮4</button> <hr> <button v-on:click="fn(btn1)">{{ btn1 }}</button> <button v-on:click="fn(btn2)">{{ btn2 }}</button> </div> </body> <script src="js/vue.js"></script> <script> // 对比DOM驱动:1)js选择器获取目标标签 2)为目标标签绑定事件 3)在事件中完成相应逻辑 // var btn = document.getElementsByTagName('button')[0]; // btn.onclick = function () { // console.log(111111111111); // }; new Vue({ el: '#app', data: { btn1: '按钮1', btn2: '按钮2', }, methods: { btnClick () { console.log(666) }, fn1 (ev) { console.log(ev.clientX, ev.clientY); }, fn2(ev, n1, n2) { console.log(ev, n1, n2); console.log(ev.clientX, ev.clientY); }, fn (msg) { console.log(msg); } } }) </script>
1)对象就可以作为字典,属性名都是字符串,可以省略引号 2)属性值时变量同属性名,可以简写 3){}中的属性值为函数,称之为方法,也可以简写 4)定义的函数,函数名大写,且函数内部有this,代表类 5)可以通过 类.prototype.类属性 实现所以对象共享
// 1)js没有字典类型,只有对象类型,对象可以完全替代字典来使用 // 2)js中对象的属性名,都采用字符串类型,所以就可以省略字符串的引号标识 // 3)对象中属性值为函数时,称之为方法,方法建议简写: 方法名(){} // 4)如果对象的属性值是一个变量,且变量名与属性名相同,还可以简写:{属性,} var dic_obj = { // 属性:值(数值,函数) 'name': 'Bob', 'eat': function () { console.log('在吃饭') } }; console.log(dic_obj.name, dic_obj['name']); dic_obj.eat(); dic_obj['eat'](); // 属性省略引号,方法简写 var obj = { name: 'Tom', eat () { console.log('在吃饭...') } }; console.log(obj.name, obj['name']); obj.eat(); obj['eat']() // 属性变量简写 var height = 180; var p = { height, name: 'Jerry', eat() {} }; console.log(p.name, p.height);
// 第一种声明类的方法 class People { constructor (name) { this.name = name } eat () { console.log(this.name + '在吃饭') } } let p1 = new People('Bob'); let p2 = new People('Tom'); console.log(p1.name, p2.name); p1.eat();
// 第二种声明类的方法(难点):在函数内部出现了this语法,该函数就是类,否则就是普通函数 function Teacher(name) { this.name = name; this.eat =function () { console.log(this.name + '在吃饭') } } let t1 = new Teacher('Owen'); t1.eat();
// 类属性:给类属性赋值,所有对象都能访问 function Fn() {} let f1 = new Fn(); let f2 = new Fn(); // 赋值类属性 Fn.prototype.num = 100; console.log(f1.num); console.log(f2.num); // 类似于单例 Vue.prototype.num = 1000; let v1 = new Vue(); let v2 = new Vue(); console.log(v1.num); console.log(v2.num);
// 1)函数的形参与调用时传入的实参关系(你传你的,我收我的) // 传入和接受的参数个数不需要一致 // 但是一定按位进行赋值(没有关键字参数) // 没有接收的实参会被遗弃,没有被赋值的形参会被赋值为undefined function fn1(a, b) { console.log(a, b); return a + b; } let res = fn1(10, 20, 30); console.log(res); // 2)函数定义的演变 let fn2 = function (a, b) { return a + b; }; // 省略关键字的箭头函数 let fn3 = (a, b) => { return a + b; }; // 没有函数体,只有返回值的函数,可以省略作用域{},由于只有返回值,所以return也省略 let fn4 = (a, b) => a + b; console.log(fn4(11, 22)); // 如果形参只有一个时,声明参数的()也可以省略 let fn5 = num => num * num; console.log(fn5(3)); // 弱语言 console.log(10 + '5'); console.log(10 - '5'); console.log(+'55555');