Posts
Vue 中的 .sync 修饰符有什么用
Vue 中的 .sync 修饰符有什么用 vue 的.sync 修饰符的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定。 .sync 修饰符其实就是一个语法糖 举个例子 子组件代码 <!-- Child.vue --> <template> <div id="child"> <div class="change" v-if="show"></div> <button class="btn" @click="$emit('update:show', !show)">点我试试</button> </div> </template> <script> export default { name: "Child", props: ["show"] }; </script> 父组件 <template> <div id="app"> <Child :show.sync="valueChild"/> <!-- A处 --> <Child :show="valueChild" @update:show="valueChild = $event"></Child> <!-- B处 --> </div> </template> <script> import Child from "./Child"; export default { name: "App", components: { Child }, data() { return { valueChild: true }; } }; </script>
Posts
Vue中computed和watch的区别
Vue 中 computed 和 watch 的区别 computed 是计算属性,watch 是监听 computed 的值不需要加括号,可以直接当属性用 computed 的计算结果会自动缓存 watch 有一个选项 immediate 在最初绑定的时候就执行 watch 还有一个选项 deep 代表是否深度监听
Posts
说说对 Vue 数据响应式的理解
说说对 Vue 数据响应式的理解 const vm =new Vue({data:{n:0}}) data 会被 Vue 监听,被篡改,本来的 n 会变成 get n ,set n vm 是对 Vue 的代理,每次对 data 的读写都会被 Vue 监控,不论是读写 data 本身,还是读写 data 的代理 Vue 会在 data 变化的时候更新 UI
Posts
浅析 Vue 两个版本的区别和使用方法
浅析 Vue 两个版本的区别和使用方法 两个版本对应的文件名
分别是 Vue 完整版(vue.js)和 Vue(vue.runtime.js )非完整版
template 和 render 怎么用
render 不需要编译器
new Vue({ render(h){ return h('div',this.hi) } }) template 需要编译器
new Vue({ template:'<div>{{hi}</div>' }) 如何用 codesandbox.io 写 Vue 代码
进入 codesandbox.io,不要登陆 点击 create sandbox 按钮,选择 vue 模板 可以直接修改保存 也可也 File-Export to Zip 导出你的 Vue 项目
Posts
MVC总结
MVC 总结 MVC 三个对象分别做什么
M-Model(数据模型)数据以及对数据的增删查改
const m = { data:{ n:0 }, create(){}, delete(){}, update(data){}, get(){} } V-View(视图模型)负责所有的 UI 界面
const v={ el:null, html:` <div></div> `, init(container){ v.el=container }, render(n){ if(v.el.children.length!==0)v.el.empty() $(v.html.replace('{{n}}',n)).appendTo(v.el) } } C-Controller(控制器)负责其他
const c={ init(){ }, events:{ 'click #add1':'add' }, add(){ m.update(data:{ n:m.data.n+1}) } } EventBus 有哪些 API,是做什么用的,给出伪代码示例
import $ from 'jquery' class EventBus{ constructor(){ this._eventBus=$(window) } on(eventName,fn){ return this._eventBus.on(eventName,fn) } trigger(eventName,data){ return this.
Posts
jQuery 的常用功能
jQuery 的常用功能 jQuery 如何获取元素 //选择表达式可以是CSS选择器: $(document) //选择整个文档对象 $('#myId') //选择ID为myId的网页元素 $('div.myClass') // 选择class为myClass的div元素 $('input[name=first]') // 选择name属性等于first的input元素 //也可以是jQuery特有的表达式: $('a:first') //选择网页中第一个a元素 $('tr:odd') //选择表格的奇数行 $('#myForm :input') // 选择表单中的input元素 $('div:visible') //选择可见的div元素 $('div:gt(2)') // 选择所有的div元素,除了前三个 $('div:animated') // 选择当前处于动画状态的div元素 jQuery 的链式操作是怎样的 就是最终选中网页元素以后,可以对它进行一系列操作,并且所有操作可以连接在一起,以链条的形式写出来
$('div').find('h3').eq(2).html('Hello'); 分解开来:
$('div') //找到div元素 .find('h3') //选择其中的h3元素 .eq(2) //选择第3个h3元素 .html('Hello'); //将它的内容改为Hello jQuery 如何创建元素
创建新元素的方法非常简单,只要把新元素直接传入 jQuery 的构造函数就行
$('<p>Hello</p>'); $('<li class="new">new list item</li>'); $('ul').append('<li>list item</li>'); jQuery 如何移动元素 第一种方法是使用.insertAfter(),把 div 元素移动 p 元素后面:
Posts
四种排序算法
四种排序算法 选择排序 //循环里第i个数字与最小数字交换顺序 let swap = (array, i, j) => { let temp = array[i] array[i] = array[j] array[j] = temp } //找到数组最小数字的索引,index一直标记着 let minIndex = (numbers) => { let index = 0 for(let i=1; i<numbers.length; i++){ if(numbers[i] < numbers[index]){ index = i } } return index } let sort = (numbers) => { for(let i=0; i< numbers.length -1; i++){ console.log(numbers,i,numbers.slice(i),) let index = minIndex(numbers.slice(i))+ i if(index!==i){ swap(numbers, index, i) } } return numbers } console.
Posts
如何理解递归
如何理解递归 判断两个数的大小 let minOf2 = (numbers) => { if(numbers[0] < numbers[1]){ return numbers[0] }else{ return numbers[1] } } 你可以简写为 let minOf2 = numbers => numbers[0] < numbers[1] ? numbers[0] : numbers[1] 或者再简写为 let minOf2 = ([a, b]) => a < b ? a : b //这种写法叫析构赋值 现成的 API, JS 内置了 Math 对象 Math.min 三个数找出最小的那个 let minOf3 = ([a,b,c]) => { return minOf2([a, minOf2([b,c])]) } 四个数找出最小的那个 let minOf4 = ([a,b,c,d]) => { return minOf2([a, minOf3([b,c,d])]) } 任意长度数组求最小值 let min = (numbers) => { return min([numbers[0], min(numbers.
Posts
JS 函数的执行时机
JS 函数的执行时机 看看下面这段代码 let i = 0 for(i = 0; i<6; i++){ setTimeout(()=>{ console.log(i) },0) } 执行结果:会打印 6 个 6
为什么呢?
for 循环执行完 setTimeout 要等 for 循环执行完再执行 这时候 i=6 再打印 6 次 6 写出让上面代码打印 0、1、2、3、4、5 的方法 for(let i = 0; i<6; i++){ setTimeout(()=>{ console.log(i) },0) } 这里每次把 i 复制一份打印出来,不跟随新的 i 变化,循环后形成 6 个新的 i 加上本身定义的 i,一共 7 个 i
除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5 for(let i = 0 ; i < 6 ; i++){ !
Posts
Js对象基本用法
Js 对象基本用法 1:声明对象的两种语法 let obj1 = new Object({'name':'Jerry'}); //标准写法 let obj2={'name':'Tom'}; //常用写法 2:如何删除对象的属性 let obj={'name':'Tom','age':18}; delete obj['name']; //删除name属性 3:如何查看对象的属性 let obj={'name':'Tom'}; Object.keys(obj); //查看对象属性 Object.values(obj); //查看对象值 Object.entries(obj); //查看对象 console.dir(obj); //查看对象 只查看属性
let obj={'name':'Tom'}; obj['name']; obj.name 4:如何修改或增加对象的属性 属性存在就是在修改,不存在就是在增加
let obj={'name':'Tom'}; obj['name'] = 'Jack'; Object.assign(obj,{p:1,p1:2}); let common = {'国籍','中国'}; let person = Object.create(common); 5:‘name’ in obj 和 obj.hasOwnProperty(‘name’) 的区别 ‘name’ in obj 判断obj对象是否存在name属性 obj.hasOwnProperty(‘name’)判断name是不是自有属性