01、vue.js 3 笔记(只是本人笔记,大家请自行到官网看文档)
需要引入:
<script src="https://unpkg.com/vue@next"></script>
第一个 Vuejs 3
<div id="counter"> Counter: {{counter}} </div> const Counter = { data() { return { counter: 0 } }, mounted(){ setInterval(()=>{ this.counter++ }, 1000) } } Vue.createApp(Counter).mount('#counter')
v-bind指令设置 attribute
指令 都是以前缀 v- 开头
<div id="bind-attribute"> <!-- 将这个元素节点的 title attribute 和当前活跃实例的 message property 保持一致 --> <span v-bind:title="message"> 鼠标悬停几秒钟查看此处动态绑定的提示信息! </span> </div> const AttributeBinding ={ data(){ return { message: 'you loaded this page on ' + new Date().toLocaleString() } } } Vue.createApp(AttributeBinding).mount('#bind-attribute')
事件 v-on
<div id="event-handling"> <p>{{message}}</p> <button v-on:click="reverseMessage">点击翻转 Message</button> </div> const EventHandling = { data(){ return { message: "Hello Vue.js" } }, methods:{ reverseMessage(){ this.message = this.message.split('').reverse().join('') } } } Vue.createApp(EventHandling).mount("#event-handling")
v-model 表单输入和应用状态之间的双向绑定
<div id="two-way-binding"> <p>{{message}}</p> <input v-model="message"> </div> const TwoWayBinding = { data(){ return { message : 'Hello Vue!' } } } Vue.createApp(TwoWayBinding).mount('#two-way-binding')
v-if
<div id="conditional-rendering"> <span v-if="seen">现在你看到我了</span> </div> const CoditionalRendering = { data(){ return { seen: true } } } Vue.createApp(CoditionalRendering).mount("#conditional-rendering")
v-for
<div id="list-rendering"> <ol> <li v-for="todo in todos"> {{todo.text}} </li> </ol> </div> const ListRendering = { data(){ return { todos: [ {text: '111'}, {text: '222'}, {text: '333'} ] } } } Vue.createApp(ListRendering).mount('#list-rendering')
组件化开发
就是在一个页面中,将每个部分都模块化,每个部分里面又可以继续模块化,形成如下图:
Vue 的组件,就是一个预定义选项的实例,注册组件也很简单,如下
<div id="todo-list-app"> <ol> <!-- 创建一个 todo-item 组件实例 --> <!-- 现在我们为每个 todo-item 提供 todo 对象 todo 对象是变量,即其内容可以是动态的。 我们也需要为每个组件提供一个“key”,稍后再 作详细解释。 --> <todo-item v-for="item in groceryList" v-bind:todo="item" v-bind:key="item.id"></todo-item> </ol> </div> // TodoItem 就是一个预定义选项的实例,即:定义了这组件的选项 const TodoItem = { props: ['todo'], // 父组件的数据传递到子组件中 template: `<li>{{todo.text}}</li>` } const TodoList = { data() { return { groceryList: [ { id: 0, text: 'Vegetables' }, { id: 1, text: 'Cheese' }, { id: 2, text: 'Whatever else humans are supposed to eat' } ] } }, components: { TodoItem // 注册一个新组件 } //... // 组件的其它 property } const app = Vue.createApp(TodoList) // 挂载 Vue 应用 app.mount('#todo-list-app')
上图的橙色箭头中为:子单元通过 prop 接口与父单元进行了良好的解耦。我们现在可以进一步改进 <todo-item> 组件,提供一个更为复杂的模板和逻辑,而不会影响到父应用。
在一个大型应用中,有必要将整个应用程序划分为多个组件,以使开发更易管理。类似:
<div id="app"> <app-nav></app-nav> <app-view> <app-sidebar></app-sidebar> <app-content></app-content> </app-view> </div>