请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

是可以通过updated传值但是为什么要点击两三次才有正确传值结果?

 <body>
<div id="app">
	<child content="lee"  @cc="hh"></child>
	<child content="dell" @cc="hh"></child>
{{inputValue}}
</div>

<script type="text/javascript">
		
			//修改vue 原型链
			Vue.prototype.bas=new Vue()		
			Vue.prototype.z=3;
	Vue.component("child",
	{
		props:{
			content:{
				type:[String]	
			}
		},
		//模板方法为had
		template:"<div @click='had'>{{content}}</div>",
		methods:{
			had:function(){
		
	this.bas.$emit("change",this.content)
 	
	this.$emit("cc")
 
 
			}	
		},
 
		
	}
	
	
	)
	var vm=new Vue({
	el:"#app",
	data:{
	
inputValue:1
	},

methods:{
hh:function(mm){
 

this.inputValue=2
}
},
//原型链的z一下子获得但是bas.on第一次不会触发?
 	 updated:function(){
		console.log('触发updated'+"获取vue原型链的z"+vm.z)
		var this_=this
		vm.bas.$on('change',function(msg){
		alert("进入方法 ")
		console.log("bas里面的this为"+this_.content)
		console.log("this_"+this_.content)
		console.log("传过来的thiscontent"+msg)
		this_.content=msg
		})
		}
	 

	

})
</script>
  </body>

正在回答

1回答

因为当 Vue 监听到数据发生更新时,update 才会被执行,bus 指向的 vue 实例才开始监听 change 事件,你只有再点击一次,才能监听到。你应该使用 mounted

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_微笑王子_0 #1
    我是被迫才使用updated.....mounted之前我也问过控制台输入vm.bas是有这方法的但是控制台警报为vm.bas为空....
    回复 有任何疑惑可以回复我~ 2019-05-27 17:52:30
  • 提问者 qq_微笑王子_0 #2
    http://coding.imooc.com/learn/questiondetail/121451.html
    这是mounted的结果...原因设这样的vm还没有实例化出来我的child就跳过去vm哪里找方法没找到就报错了............有没有什么办法_(:з」∠)_
    回复 有任何疑惑可以回复我~ 2019-05-27 17:54:53
  • 六一888 回复 提问者 qq_微笑王子_0 #3
    老师给了你答案了,不要用 vm,另外建一个 vue 实例。 PS:我觉得你的代码逻辑很复杂,我不知道你这么写的目的是什么,目的更重要,换一个逻辑写,而不要死磕在代码细节中。
    回复 有任何疑惑可以回复我~ 2019-05-27 23:09:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信