petite-vue JS库
在生产环境中引用https://unpkg.com/petite-vue@0.2.2/dist/petite-vue.iife.js
使用方法:
//注意,中间的defer init自动初始化步骤必须执行,否则无法使用
<script src="https://unpkg.com/petite-vue" defer init></script>
<div v-scope="{ count: 0 }">
{{ count }}
<button @click="count++">inc</button>
</div>
用于v-scope标记页面上由petite-vue控制的区域
该defer属性使脚本在解析 HTML 内容后执行。
该init属性告诉petite-vue自动查询并初始化v-scope页面上的所有元素。
或者手动初始化:
<script src="https://unpkg.com/petite-vue"></script>
<script>
PetiteVue.createApp().mount()
</script>
手动初始化并替换插值变量标签:
<script src="https://unpkg.com/petite-vue@0.2.2/dist/petite-vue.iife.js"></script>
<script>
PetiteVue.createApp({
$delimiters: ['${', '}']
}).mount()
</script>
兼容Vue
{{ }}文本绑定(可使用自定义分隔符进行配置)
v-bind(包括:速记和类/样式特殊处理)
v-on(包括@简写和所有修饰符)
v-model(所有输入类型+非字符串:value绑定)
v-if// v-else_v-else-if
v-for
v-show 显示或隐藏
v-html
v-text
v-pre
v-once
v-cloak
reactive()
nextTick()
模板参考
不支持
ref(),computed()ETC。
渲染函数(petite-vue没有虚拟 DOM)
集合类型的反应性(Map、Set 等,由于尺寸较小而被删除)
过渡、保活、传送、悬念
v-for深度解构
v-on="object"v-is&<component :is="xxx">
v-bind:style自动前缀
项目链接:https://github.com/vuejs/petite-vue
示范:
<!-- 控制元素显示或隐藏,点击按钮切换 -->
<div v-show="isVisible">
该方法控制这个元素是否显示
</div>
<button @click="isVisible = !isVisible">
<!-- 绑定输入框为变量textnumber,监听输入事件触发updateCharCount函数
统计它的字符数量传递给charCount,也可以直接写成:@input="charCount = textnumber.length"这样就不需要下面的函数了
-->
<input v-model="textnumber" @input="updateCharCount" type="text">
<label>${ charCount }/300</label>
<script src="./static/petite-vue.js"></script>
<script>
PetiteVue.createApp({
//修改变量标识符
$delimiters: ['${', '}'],
//定义变量初始值
isVisible: false,
charCount: 0,
textnumber: null,
//定义函数
updateCharCount() {
this.charCount = this.textnumber.length;
}
}).mount();
</script>
v-text的示范
点击复制绑定文本,并在按钮内显示一个复制的图标状态5秒
<button @click="showIcon"">
<svg v-show="isHidden" />
</svg>复制txt</button>
<p v-text="nodeCopy"></p>
<script src="/static/petite-vue.js"></script>
<script>
PetiteVue.createApp({
isHidden: false,
nodeCopy: "这是文本",
showIcon() {
console.log("按钮运行")
navigator.clipboard.writeText(this.nodeCopy)
this.isHidden = true;
setTimeout(() => {
this.isHidden = false;
}, 2000);
},
}).mount();
</script>
控制元素隐藏切换,但是初始化前要一直隐藏的方法
<style>
[v-cloak] {
display: none;
}
</style>
<div v-cloak v-show="isVisible"> </div>
这样就会在isVisible被赋值前也一直保持隐藏
三元表示法:
<input :type="showPassword ? 'password' : 'text'">
<button type="button" @click="showPassword = !showPassword">
<svg v-show="showPassword">
图标一
</svg>
<svg v-show="!showPassword">
图标二
</svg>
</button>
该方法实现了一个密码输入框是否显示密码的功能,输入框根据showPassword变量来指定是password 还是text,而按钮也根据变量来显示眼睛和闭眼图标
添加class样式
这里的flex items-center会一直显示,而bg-indigo-600 text-white根据条件显示
<label @click="sKu='L'" :class="['flex items-center',{'bg-indigo-600 text-white':sKu==='L'}]">
</label>
这是一个sku选择的完整示范:
给每个sku 的input radio 都v-model="sKu",然后追加的class都用sKu==='<value的值>'来判断是不是选中了自己
<label :class="['flex items-center justify-center rounded-md border py-3 px-3 text-sm font-medium uppercase sm:flex-1 cursor-pointer focus:outline-none',{'ring-2 ring-indigo-500 ring-offset-2 border-transparent bg-indigo-600 text-white':sKu==='L'}]">
<input v-model="sKu" type="radio" value="L" class="sr-only">L
</label>
调用其他js里的方法
index.html:
<div v-html="msg"></div>
<script src="/static/petite-vue.js"></script>
<script src="/static/theme.js"></script>
<script>
PetiteVue.createApp({
$delimiters: ['${', '}'],
isDark: theme(), //theme()是temem.js的方法,返回布尔值
//表单提交时运行事件
checkPasswords(event) {
Message(this,"这是一个测试",2);
//第一个参数传入this,代表传入vue的app自身
},
}).mount();
</script>
theme.js:
//根据本地存储桶读取的变量来返回布尔,是否是黑暗模式,并为Html添加dark class
function theme () {
var theme1 = localStorage.getItem('theme'); //读取本地主题
if (theme1 != "dark") {
document.documentElement.classList.remove('dark');
return false;
} else {
document.documentElement.classList.add('dark');
return true;
}
}
function Message (app,msg,type) {
html = "<div>类型:${type},消息:${msg}</div>"
app.msg = html; //访问vue里的msg对象
//定时关闭
setTimeout(() => {
app.msg = "";
}, 3500)
}
初始化完成立即执行
<div @vue:mounted="mounted"></div>
<script src="/static/tpetite-vue"></script>
<script>
PetiteVue.createApp({
//立即执行,需要在任意元素使用@vue:mounted="mounted"
mounted() {
console.log("它会立即执行")
},
}).mount();;
</script>
常见错误:
某个,可能是 变量没有初始赋值
axios
cdn引用:<script src="https://unpkg.com/axios/dist/axios.min.js"></script>