VUE基础知识六

本文详细介绍了Vue.js中的自定义指令创建及其应用,包括如何定义局部和全局指令,以及`v-big`和`v-fbind`指令的实现。同时,深入探讨了Vue实例的生命周期,展示了`mounted`、`beforeDestroy`等关键生命周期钩子的使用,并通过示例解释了在不同生命周期阶段进行的操作。文章最后总结了自定义指令和生命周期的重要知识点,强调了在不同阶段进行资源管理和操作的最佳实践。

目录

1、自定义指令

2、生命周期 

3、生命周期总结

1、自定义指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript"  src="js/vue.min.js"></script>
</head>
<body>
   <!-- 
		需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。
		需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。
	-->
  <div id="app">
    <h2>当前的n值是:<span v-text="n"></span> </h2>
    <h2>放大10倍后的n值是:<span v-big="n"></span> </h2>
    <button @click="n++">点我n+1</button>
    <hr/>
    <input type="text" v-fbind:value="n">
  </div>
</body>

<script type="text/javascript">
  new Vue({
    el:'#app',
    data:{
      n:1
    },
    directives:{
              //big函数何时会被调用?1.指令与元素成功绑定时(一上来) 2.指令所在的模板被重新解析时
      big(element,binding){
        console.log('big',this) //注意此处的this是window
        element.innerText = binding.value * 10
      },
      fbind:{
        //指令与元素成功绑定时(一上来)
        bind(element,binding){
          element.value = binding.value
        },
        //指令所在元素被插入页面时
        inserted(element,binding){
          element.focus()
        },
        //指令所在的模板被重新解析时
        update(element,binding){
          element.value = binding.value
        }
      }
    }
  })
</script>
</html>

效果图:

 

总结: 

1.自定义指令定义语法:

  1. 局部指令:

 new Vue({															
 	directives:{指令名:配置对象}   
 }) 

    2.

 new Vue({															
 	directives:{指令名:回调函数}   
 }) 

全局指令:

  1. Vue.directive(指令名,配置对象)
  2. Vue.directive(指令名,回调函数)

例如:

Vue.directive('fbind',{
	//指令与元素成功绑定时(一上来)
	bind(element,binding){
		element.value = binding.value
	},
    //指令所在元素被插入页面时
    inserted(element,binding){
    	element.focus()
    },
    //指令所在的模板被重新解析时
    update(element,binding){
    	element.value = binding.value
    }
})

2.配置对象中常用的3个回调函数:

bind(element,binding):指令与元素成功绑定时调用
inserted(element,binding):指令所在元素被插入页面时调用
update(element,binding):指令所在模板结构被重新解析时调用
3.备注:

指令定义时不加“v-”,但使用时要加“v-”

指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名

new Vue({
	el:'#root',
	data:{
		n:1
	},
	directives:{
		'big-number'(element,binding){
			element.innerText = binding.value * 10
		}
	}
})

2、生命周期 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript"  src="js/vue.min.js"></script>
</head>
<body>
  <div id="app">
    <h2 v-if="a">你好啊</h2>
    <h2 :style="{opacity}">欢迎学习Vue</h2>
  </div>
</body>

<script type="text/javascript">
   new Vue({
    el:'#app',
    data:{
      a:false,
      opacity:1
    },
    mounted(){
      console.log('mounted',this)
      setInterval(() => {
        this.opacity -= 0.01
        if(this.opacity <= 0) this.opacity = 1
      },16)
    },
  })
</script>
</html>

效果图:

 

总结: 

生命周期:

  1. 又名:生命周期回调函数、生命周期函数、生命周期钩子
  2. 是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数
  3. 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的
  4. 生命周期函数中的this指向是vm 或 组件实例对象

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript"  src="js/vue.min.js"></script>
</head>
<body>
  <div id="app">
    <h2 v-text="n"></h2>
			<h2>当前的n值是:{{n}}</h2>
			<button @click="add">点我n+1</button>
			<button @click="bye">点我销毁vm</button>
		</div>
	</body>

	<script type="text/javascript">
		new Vue({
			el:'#app',
			data:{
				n:1
			},
			methods: {
				add(){
					console.log('add')
					this.n++
				},
				bye(){
					console.log('bye')
					this.$destroy()
				}
			},
			watch:{
				n(){
					console.log('n变了')
				}
			},
			beforeCreate() {
				console.log('beforeCreate')
			},
			created() {
				console.log('created')
			},
			beforeMount() {
				console.log('beforeMount')
			},
			mounted() {
				console.log('mounted')
			},
			beforeUpdate() {
				console.log('beforeUpdate')
			},
			updated() {
				console.log('updated')
			},
			beforeDestroy() {
				console.log('beforeDestroy')
			},
			destroyed() {
				console.log('destroyed')
			},
		})
	</script>
</html>

效果图:

 

3、生命周期总结

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript"  src="js/vue.min.js"></script>
</head>
<body>
  <div id="app">
    <h2 :style="{opacity}">欢迎学习Vue</h2>
			<button @click="opacity = 1">透明度设置为1</button>
			<button @click="stop">点我停止变换</button>
		</div>
	</body>

	<script type="text/javascript">
		 new Vue({
			el:'#app',
			data:{
				opacity:1
			},
			methods: {
				stop(){
					this.$destroy()
				}
			},
			mounted(){
				console.log('mounted',this)
				this.timer = setInterval(() => {
					console.log('setInterval')
					this.opacity -= 0.01
					if(this.opacity <= 0) this.opacity = 1
				},16)
			},
			beforeDestroy() {
				clearInterval(this.timer)
				console.log('vm即将销毁了')
			},
		})
	</script>
</html>

效果图:

 

总结:

1.常用的生命周期钩子:

  • mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等初始化操作
  • beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等收尾工作

2.关于销毁Vue实例:

  • 销毁后借助Vue开发者工具看不到任何信息
  • 销毁后自定义事件会失效,但原生DOM事件依然有效
  • 一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了 

 

 

### Vue.js 基础知识教程:入门指南 Vue.js 是一种用于构建用户界面的渐进式 JavaScript 框架,其核心库专注于视图层,具有响应式数据绑定、组件化开发模式和简洁灵活的 API 设计等特。学习 Vue基础知识是进入现代前端开发的重要一步。 #### 1. 学习前的准备 在开始学习 Vue 之前,建议掌握以下基础技能: - **HTML 基础**:熟悉常用标签如 `div`、`p`、`span` 等。 - **CSS 基础**:能够编写简单样式规则。 - **JavaScript 基础**:理解变量、函数、对象等核心概念,并了解 ES6+ 的语法特性(如箭头函数、解构赋等)[^2]。 这些前置知识将有助于更好地理解和应用 Vue 提供的功能。 #### 2. 安装与初始化方式 Vue 可以通过多种方式进行安装和使用: - **CDN 引入**:适合快速体验或小型项目,直接在 HTML 文件中通过 `<script>` 标签引入 Vue 的 CDN 地址即可使用。 示例代码: ```html <script src="https://cdn.jsdelivr.net/npm/vue@3"></script> ``` - **Vue CLI 创建项目**:适用于中大型项目,通过 Vue CLI 工具可以快速生成结构清晰、配置完整的项目模板。 - **Vite 构建工具**:作为新一代构建工具,Vite 提供了更快的冷启动速度和热更新体验,推荐用于新项目的搭建[^3]。 #### 3. Vue 的核心特性 Vue 的设计目标之一是易于上手,同时又具备构建复杂单页应用的能力。以下是其核心特性的简要介绍: - **响应式数据绑定**:当数据发生变化时,视图会自动更新。这种机制简化了 DOM 操作并提高了开发效率。 - **组件化开发模式**:每个功能模块都可以封装为独立组件,便于复用和维护。 - **虚拟 DOM**:通过高效的 Diff 算法进行 DOM 更新,提升了性能表现。 - **指令系统**:提供了一系列内置指令(如 `v-if`、`v-for`、`v-bind` 等),用于操作 DOM 和控制渲染逻辑。 - **模板语法**:基于 HTML 扩展的模板语法,使开发者可以更直观地编写 UI 结构[^3]。 #### 4. 第一个 Vue 应用示例 以下是一个简单的 Vue 应用示例,展示了如何创建一个基本的响应式页面: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Vue 入门示例</title> <script src="https://cdn.jsdelivr.net/npm/vue@3"></script> </head> <body> <div id="app"> <h1>{{ message }}</h1> <button @click="changeMessage">击更改消息</button> </div> <script> const { createApp } = Vue; createApp({ data() { return { message: '欢迎学习 Vue.js!' }; }, methods: { changeMessage() { this.message = '你已成功修改了消息!'; } } }).mount('#app'); </script> </body> </html> ``` 该示例演示了数据绑定、事件监听和方法调用的基本用法,适合初学者快速上手。 #### 5. 推荐学习路径 为了更系统地掌握 Vue基础知识,建议按照以下顺序逐步深入: - 从官方文档入手,理解 Vue 的生命周期、计算属性、侦听器等核心概念。 - 学习 Vue Router 的基本用法,实现页面之间的导航与嵌套路由。 - 掌握 Vuex 或 Pinia 状态管理工具,用于处理跨组件的数据共享问题。 - 实践开发小项目,如待办事项列表、天气查询应用等,巩固所学知识。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值