VUE—从入门到飞起(二)

目录

过滤器filter

vue-resource发送http请求

axios发送http请求

VUE生命周期

VUE生命周期钩子函数

自定义指令

watch

computed


过滤器filter

<body>
	<div id="app">
		<!--过滤器也可以在调用的时候传递多个参数-->
		<!--过滤器也可以多次调用-->
		<p>{{ msg | msgFormat('疯狂'+1, '123') | test }}</p>
	</div>
</body>
<script>
	//定义一个vue全局过滤器,msgFormat
	Vue.filter('msgFormat', function(msg, arg, arg2) {
		//字符串的replace方法,第一个参数还可以写正则
		return msg.replace(/单纯/g, arg + arg2);
	});
	Vue.filter('test', function(msg) {
		//字符串的replace方法,第一个参数还可以写正则
		return msg + '=====';
	});

	var vm = new Vue({
		el: "#app",
		data: {
			msg: "曾经,我也是一个单纯的少年,我很单纯"
		},
		methods: {

		}
	})
</script>

vue-resource发送http请求

导入vue.js、vue-resource.js注意:vue-resource依赖vue,所以注意先后顺序
<div id="app">
	<input type="button" @click="getData" value="get请求" />
	<input type="button" @click="postData" value="post请求" />
	<input type="button" @click="jsonpData" value="jsonp请求" />
</div>
<script>
	
	function jsonFc(data){
		console.log("jsonp" + data);
		console.log(data.name);
		console.log(data.age);
	}
	var vm = new Vue({
		el:"#app",
		data:{
			
		},
		methods:{
			getData(){//发起get请求,通过.then来设置回调函数
				this.$http.get("http://127.0.0.1:3000/jsonpData").then(function(result){
					//成功回调
					console.log(result);
				},function(err){
					//失败回调
				})
			},
			postData(){//post请求
				//手动发起的post请求默认没有表单格式,有的服务器处理不了
				//通过post方法第三个参数,设置提交的内容为普通表单格式
				this.$http.post("/url", {}, {emulateJSON:true}).then(result=>{
					//成功回调
					console.log(result);
				},err=>{
					//失败回调
				})
			},
			jsonpData(){//jsonp
				this.$http.jsonp("http://127.0.0.1:3000/jsonpData").then(result=>{
					console.log(result);
				},err=>{
				})
			}
		}
	})
</script>

axios发送http请求

注意导入vue.min.js和axios.min.js
GET方式:
    axios
      .get('url')
      .then(response => (
        this.info = response.data.sites
       ))
      .catch(function (error) { // 请求失败处理
        alert(error);
      });
  

POST方式:
axios.post('url',{
	rows : json
}).then(function(resp){
	
}).catch(function(e){
	//请求失败处理
});
  
post方式后台获取参数为null解决办法:
axios.post('url','keys=' + evictStr).then(function(resp){
console.log(resp);
}).catch(function(e){
	
});

VUE生命周期

VUE生命周期钩子函数

<div id="app">
	<input type="button" value="修改msg" @click="msg = 'no'" />
	<h3 id="h3">{{ msg }}</h3>
</div>
<script>
	var vm = new Vue({
		el:"#app",
		data:{
			msg:'ok'
		},
		methods:{
			show(){
				console.log("执行了show()");
			}
		},
		beforeCreate(){
			//这是我们遇到的第一个生命周期函数,表示实例完全被创建出来之前会执行。
			//在本方法中,data和methods都未被初始化
			//console.log(this.msg);//undefined
			//this.show();//方法也未被初始化
		},
		created(){
			//这是遇到的第二个生命周期函数
			//在本方法中,data和methods都已经初始化好了
			//如果要调用methods和data,最早应该是在created方法中操作。
			//console.log(this.msg);ok
			//this.show();//执行了show()
		},
		beforeMount(){
			//这是遇到的第三个生命周期函数,表示模板已经编译完成了,但是尚未把模板渲染到页面中
			//beforeMont执行的时候,页面中的元素,还没有真正替换过来,只是之前写的一些模板字符串
			//console.log(document.getElementById("h3").innerText);//{{ msg }}
		},
		mounted(){
			//这是遇到的第四个生命周期函数,表示内存中的模板已经真实的挂载到页面中,用户已经可以看到渲染好的页面了
			//注意:mounted是实例创建期间的最后一个生命周期函数,当执行mounted已经完全创建好了,
			//如果要通过某些插件操作页面上的dom节点,最早要在mounted中进行操作
			//此时如果没有其他操作的话,这个实例就静静地躺在内存中一动不动
			//此时组件已经脱离了创建阶段,进入了运行阶段。
			//console.log(document.getElementById("h3").innerText);//ok
		},
		//接下来的是运行中的两个事件
		beforeUpdate(){
			//数据被更新了触发这个事件,这时候表示我们的界面还没有被更新
			console.log("beforeUpdate界面上元素的内容" + document.getElementById("h3").innerText);//ok
			console.log("beforeUpdatedata中的内容" + this.msg);//no
			//得出结论:当执行beforeUpdate时,页面中的元素是旧的,此时data中数据是新的
		},
		updated(){
			//update执行的时候,页面和data数据,已经保持一致了
			console.log("updated界面上元素的内容" + document.getElementById("h3").innerText);//no
			console.log("updateddata中的内容" + this.msg);//no
		},
		beforeDestroy(){
			//当执行beforeDestroy,vue实例从运行阶段进入了销毁节点。
			//当执行beforeDestroy的时候,此时实例身上所有data、methods过滤器等等,都处于可用状态。
			
		},
		destroyed(){
			//当执行destroyed时候,组件已经被完全销毁了,此时组件中所有的data、methods等都不可用。
		}
	})
</script>

自定义指令

<div id="app">
	<p>页面载入时,input 元素自动获取焦点:</p>
	<input v-focus>
</div>

<script>
// 注册一个全局自定义指令 v-focus
/*Vue.directive('focus', {
  // 当绑定元素插入到 DOM 中。
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})*/
// 创建根实例
new Vue({
  el: '#app',
  directives: {
    // 注册一个局部的自定义指令 v-focus
    focus: {
      // 指令的定义
      inserted: function (el) {
        // 聚焦元素
        el.focus()
      }
    }
  }
})
</script>

watch

<div id="app">
	<input type="text" v-model="firstname"/>+
	<input type="text" v-model="lastname" />=
	<input type="text" v-model="fullname" />
</div>

<script>
	var vm = new Vue({
		el:"#app",
		data:{
			firstname:'',
			lastname:'',
			fullname:''
		},
		methods:{
		},
		watch:{
			//使用watch监视data 中指定数据的变化,触发这个watch
			firstname:function(newVal, oldVal){
				this.fullname = newVal + '-' + this.lastname;
			},
			lastname:function(newVal){
				this.fullname = this.firstname + '-' + newVal;
			}
		}
	})
</script>

computed

<div id="app">
	<input type="text" v-model="firstname"/>+
	<input type="text" v-model="lastname" />=
	<input type="text" v-model="fullname" />
	
	<p>{{ fullname }}</p>
	<p>{{ fullname }}</p>
	<p>{{ fullname }}</p>
</div>

<script>
	var vm = new Vue({
		el:"#app",
		data:{
			firstname:'',
			lastname:''
		},
		methods:{
		},
		computed:{
			//在这里可以定义一些属性,这些属性叫做计算属性,
			//计算属性本质就是一些方法,只不过我们在使用这些计算属性的时候,是把它们的名称直接当做属性来使用
			//并不会把计算属性,当做方法去调用
			
			//注意:计算属性,在引用的时候,一定不要加小括号()去调用, 直接把它当做普通属性去使用
			//注意:只要计算属性, 这个function内部所用到的任何data中的数据发生变化,就会立即重新计算属性值
			//注意:计算属性的求值结果,会被缓存起来,方便下次直接使用;如果计算属性中所依赖的所有数据,都没有发生过变化,则不会重新计算求值
			fullname:function(){
				console.log("ok");
				return this.firstname + '-' + this.lastname;
			}
		}
	})
</script>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章