Vue.js的核心是Vue实例,用来管理你的应用。以下是一个创建Vue实例的示例:
- html>
- <html>
- <head>
- <title>Vue.js入门示例title>
-
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js">script>
- head>
- <body>
- <div id="app">
- {{ message }}
- div>
-
- <script>
- // 创建一个Vue实例
- var app = new Vue({
- el: '#app', // 关联实例到id为app的HTML元素
- data: {
- message: 'Hello, Vue!'
- }
- });
- script>
- body>
- html>
)。data
属性包含了我们的数据,这里是一个message
属性,它在HTML模板中用双花括号语法插入。
2. 数据绑定
Vue.js支持数据绑定,当数据改变时,视图会自动更新。以下是一个简单的示例:
- <div id="app">
- <p>{{ message }}p>
- <button @click="changeMessage">Change Messagebutton>
- div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- message: 'Hello, Vue!'
- },
- methods: {
- changeMessage: function() {
- this.message = 'New Message!';
- }
- }
- });
- script>
- 在这个示例中,我们在Vue实例中定义了一个方法
changeMessage
,它会在按钮点击时改变message
属性的值。
3. 条件与循环
Vue.js允许你使用指令来处理条件渲染和循环渲染。以下是示例:
- <div id="app">
- <p v-if="showMessage">{{ message }}p>
- <ul>
- <li v-for="item in items">{{ item }}li>
- ul>
- div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- message: 'Hello, Vue!',
- showMessage: true,
- items: ['Item 1', 'Item 2', 'Item 3']
- }
- });
- script>
v-if
用于条件渲染,只有当showMessage
为true
时,段落才会显示。v-for
用于循环渲染,将items
数组中的项渲染为列表项。
4. 事件处理
Vue.js允许你轻松地处理用户交互事件。以下是一个事件处理的示例:
- <div id="app">
- <button @click="sayHello">Say Hellobutton>
- div>
-
- <script>
- var app = new Vue({
- el: '#app',
- methods: {
- sayHello: function() {
- alert('Hello, Vue!');
- }
- }
- });
- script>
- 这个示例中,我们使用
@click
指令来监听按钮点击事件,并调用sayHello
方法来弹出一个提示框。
5. 组件
Vue.js允许你创建可复用的组件。以下是一个简单的组件示例:
- <div id="app">
- <my-component>my-component>
- div>
-
- <script>
- // 定义一个全局的组件
- Vue.component('my-component', {
- template: 'This is a custom component'
- });
-
- var app = new Vue({
- el: '#app'
- });
- script>
- 这个示例中,我们定义了一个名为
my-component
的全局组件,然后在HTML中使用它。
6. 生命周期钩子
Vue.js提供了生命周期钩子函数,允许你在组件的不同生命周期阶段执行代码。以下是一个生命周期钩子的示例:
- <div id="app">
- <p>{{ message }}p>
- div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- message: 'Hello, Vue!'
- },
- beforeCreate: function() {
- console.log('Before Create Hook');
- },
- created: function() {
- console.log('Created Hook');
- },
- mounted: function() {
- console.log('Mounted Hook');
- }
- });
- script>
- 这个示例中,我们定义了
beforeCreate
、created
和mounted
生命周期钩子函数,并在控制台中打印消息以便观察组件生命周期。
7. 计算属性
Vue.js允许你定义计算属性,这些属性根据其他属性的变化而动态计算。以下是一个计算属性的示例:
- <div id="app">
- <p>{{ fullName }}p>
- div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- firstName: 'John',
- lastName: 'Doe'
- },
- computed: {
- fullName: function() {
- return this.firstName + ' ' + this.lastName;
- }
- }
- });
- script>
- 在这个示例中,我们定义了一个计算属性
fullName
,它动态计算出firstName
和lastName
的合并结果。
8. 条件类与样式绑定
Vue.js允许你通过条件判断动态绑定类和样式。以下是一个条件类和样式绑定的示例:
- <div id="app" :class="{ 'active': isActive, 'error': hasError }">
- <p :style="{ color: textColor, fontSize: textSize + 'px' }">Styled Textp>
- div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- isActive: true,
- hasError: false,
- textColor: 'blue',
- textSize: 20
- }
- });
- script>
- 在这个示例中,我们使用
:class
和:style
指令来动态绑定类和样式,具体取决于数据属性的值。
9. 表单处理
Vue.js使表单处理变得更加简单,可以轻松地实现双向数据绑定。以下是一个简单的表单处理示例:
- <div id="app">
- <input v-model="message" placeholder="Type something">
- <p>You typed: {{ message }}p>
- div>
-
- <script>
- var app = new Vue({
- el: '#app',
- data: {
- message: ''
- }
- });
- script>
- 这个示例中,我们使用
v-model
指令在输入框和数据属性message
之间建立双向绑定,实现实时更新。
10. Vue Router
Vue Router是Vue.js的官方路由管理器,用于构建单页面应用(SPA)。以下是一个简单的Vue Router示例:
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js">script>
- <script src="https://unpkg.com/vue-router@3.5.3/dist/vue-router.js">script>
-
- <div id="app">
- <router-link to="/home">Homerouter-link>
- <router-link to="/about">Aboutrouter-link>
-
- <router-view>router-view>
- div>
-
- <script>
- // 定义组件
- var HomeComponent = { template: 'Home Component' };
- var AboutComponent = { template: 'About Component' };
-
- // 创建Vue实例并配置路由
- var app = new Vue({
- el: '#app',
- router: new VueRouter({
- routes: [
- { path: '/home', component: HomeComponent },
- { path: '/about', component: AboutComponent }
- ]
- })
- });
- script>
- 这个示例中,我们引入了Vue Router库,定义了两个组件
HomeComponent
和AboutComponent
,并配置了路由。
11. 自定义指令
Vue.js允许你创建自定义指令来扩展Vue的功能。以下是一个自定义指令的示例:
- <div id="app">
- <p v-highlight="'yellow'">This text is highlightedp>
- div>
-
- <script>
- // 注册全局自定义指令 v-highlight
- Vue.directive('highlight', {
- bind(el, binding) {
- // el是绑定指令的元素
- // binding.value是指令的参数,在这里是颜色
- el.style.backgroundColor = binding.value;
- }
- });
-
- var app = new Vue({
- el: '#app'
- });
- script>
- 这个示例中,我们创建了一个名为
v-highlight
的自定义指令,用于修改元素的背景颜色。
12. Vuex 状态管理
当应用变得复杂时,状态管理变得关键。Vue.js提供了Vuex库来管理应用的状态。以下是一个简单的Vuex示例:
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js">script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/vuex@3.6.2/vuex.js">script>
-
- <div id="app">
- <p>Count: {{ $store.state.count }}p>
- <button @click="increment">Incrementbutton>
- div>
-
- <script>
- // 创建一个 Vuex store
- const store = new Vuex.Store({
- state: {
- count: 0
- },
- mutations: {
- increment(state) {
- state.count++;
- }
- }
- });
-
- var app = new Vue({
- el: '#app',
- store,
- methods: {
- increment() {
- this.$store.commit('increment');
- }
- }
- });
- script>
- 这个示例中,我们创建了一个简单的Vuex store,用于管理一个计数器的状态。
13. 路由守卫
Vue Router提供了路由守卫,允许你在导航到不同路由时执行一些逻辑。以下是一个路由守卫的示例:
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js">script>
- <script src="https://unpkg.com/vue-router@3.5.3/dist/vue-router.js">script>
-
- <div id="app">
- <router-link to="/home">Homerouter-link>
- <router-link to="/about">Aboutrouter-link>
-
- <router-view>router-view>
- div>
-
- <script>
- var app = new Vue({
- el: '#app',
- router: new VueRouter({
- routes: [
- { path: '/home', component: HomeComponent },
- { path: '/about', component: AboutComponent }
- ]
- })
- });
-
- // 全局前置守卫
- app.$router.beforeEach((to, from, next) => {
- // 在导航前执行逻辑
- console.log('Navigating to', to.path);
- next();
- });
-
- var HomeComponent = { template: 'Home Component' };
- var AboutComponent = { template: 'About Component' };
- script>
- 这个示例中,我们使用了全局前置守卫,在每次导航前打印日志。