vue学习之的v-for,:key,@,ref,nextTick的使用以及生命周期函数介绍

本文详细介绍了Vue.js中的v-for指令、key属性、ref引用以及nextTick的使用。通过实例展示了如何在v-for循环中使用key避免元素重复渲染,以及如何利用ref获取元素并进行操作。同时,解释了nextTick在DOM更新后的延迟回调作用,配合生命周期函数展示了其在实际应用中的效果。

1.v-for,:key,@,ref

下面是官方的文档,可以点进去看下,最好结合例子实践下。

例子

例子可以直接拷贝到(https://www.runoob.com/try/try-cdnjs.php?filename=vue2-v-for)实践。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue v-for</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
<li v-for="(person,index) in array" :key="person.id">
	<input ref="inputx" id="inputx" v-model.lazy='person.name' @focus='focusEvent' />
</div>

<script>
new Vue({
  el: '#app',
  data: {
    array: [
      { id:1,name: 'armwind1' },
      { id:2,name: 'armwnid3' },
      { id:3,name: 'armwind2' },
      { id:4,name: 'armwnid4'}
    ]
  },
  methods:{
    focusEvent(event){
        var target = event.srcElement;
           this.$nextTick(()=>{
             let id = target.getAttribute("id");
			   console.log(id);
              if(id){
                let ta = this.$refs[id][3];
				  console.log(ta)
                //if(ta)
                  //ta.focus();
              }
         })
    }
}
})
</script>
</body>
</html>
  • v-for:vue的标签编译后不会显示出来的,能显示出来的都是标准的。从下面的调试页面能够卡纳都标准的html标签,其它vue的标签没有了。
    在这里插入图片描述
    这里就用下面的例子,其中person就是array中的元素,而index为默认的索引数据(从0开始).下面会有vue循环创建4个input输入框,并设置默认显示值和focus事件响应方法。
<div id="app">
<li v-for="(person,index) in array" :key="person.id">
	<input ref="inputx" id="inputx" v-model.lazy='person.name' @focus='focusEvent' />
</div>
  • @focus:这里是一个简写方式,其中v-on简写成了@,拓展出来为v-on:focus.看到不要在纠结了,其它事件,请参考官方文档。
  • “:key”:一开始看到前面加个:这个又是什么操作,原来:是v-bind的简写,对应v-bind:key。这里key值最好在data中设置一个对应的id,避免元素的重复渲染(参考例子:https://blog.youkuaiyun.com/qq_41609404/article/details/84064064)。
  • ref:这个是一个标签对象的引用对象。可以理解成C语言中的指针。直接可以在全局的$refs中找到这个元素的对象,操作相当方便。 ref官方文档

2.nextTick的使用和生命周期函数介绍

  • nextTick
    nexttick官方理解
    nexttick一开始也就没怎么理解,但是看着例子就明白了。说白了,它就是延迟执行的回调。 其它参考文章:https://www.jianshu.com/p/a7550c0e164f

将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例上。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue nextTick</title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div class="app" ref="div_test">
  <div ref="msgDiv">{{msg}}</div>
  <div v-if="msg1">Msg1: {{msg1}}</div>
  <div v-if="msg2">Msg2: {{msg2}}</div>
  <div v-if="msg3">Msg3: {{msg3}}</div>
  <button @click="changeMsg">
    Change the Message
  </button>
</div>
    
<script>
new Vue({
  el: '.app',
  data: {
    msg: 'Hello Vue.',
    msg1: '',
    msg2: '',
    msg3: ''
  },
  methods: {
    changeMsg() {
      this.msg = "Hello world."
      this.msg1 = this.$refs.msgDiv.innerHTML
      console.log("msg1:"+this.msg1)
      this.$nextTick(() => {
        this.msg2 = this.$refs.msgDiv.innerHTML
		  console.log("msg2:"+this.msg2)
      })
      this.msg3 = this.$refs.msgDiv.innerHTML
		console.log("msg3:"+this.msg3)
      this.$refs.div_test.append("armwind"); // 增加一个对象到div
    }
  },
  beforeCreate(){
    console.log('beforecreate:')//null
  },
  created(){
        console.log('create:')//null
  },
  beforeMount(){
    console.log('beforeMount:')//null
  },
  mounted(){
    console.log('mounted:')//<p></p>
  },
  beforeUpdate(){
    console.log('beforeUpdate:')//null
  },
  updated(){
    console.log('updated:')//<p></p>
  }
})
</script>
</body>
</html>

上面的例子拖到浏览器中可以看到,一开始div元素下是没有添加"<div v-if="这样的3个标签,确认代之是三个注释符。此外可以看到生命周期函数打印了右下角4个生命 周期函数。
在这里插入图片描述
下面要注意的是源码中按理说log打印顺序是msg1,msg2,msg3,但是右下角可以看到,打印顺序是msg1,msg3,msg2,而msg2还是在beforeUpdate和updated之后打印的,这是为什么呢。这是由于nextTick就是为会在下一次页面更新后才执行的。由于页面已经更新了,所以this.$refs.msgDiv.innerHTML获取到就是"hello world"字符串,这里由于msg2的数据更新了。同样会触发页面更新,也就又会打印一次beforeupdate和updated函数。

-

  • 生命周期
    生命周期方法可以让我们知道可以在合适执行响应的操作,更多详细还是看官方文档。下面欣赏下官方流程图,很重要
你给的代码有好多错啊 10main.vue:189 [Element Warn][TableColumn]Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header. setColumnRenders @ index.js:1 boundFn @ vue.esm.js:186 (匿名) @ index.js:1 (匿名) @ index.js:1 created @ index.js:1 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4476 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 updateChildren @ vue.esm.js:5655 patchVnode @ vue.esm.js:5735 patch @ vue.esm.js:5884 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ main.vue:189 Promise.then getUserInfo @ main.vue:184 boundFn @ vue.esm.js:187 created @ main.vue:93 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4476 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5915 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 (匿名) @ vue-router.esm.js:2508 (匿名) @ vue-router.esm.js:2507 updateRoute @ vue-router.esm.js:1997 (匿名) @ vue-router.esm.js:1875 (匿名) @ vue-router.esm.js:1984 step @ vue-router.esm.js:1714 step @ vue-router.esm.js:1721 step @ vue-router.esm.js:1721 runQueue @ vue-router.esm.js:1725 (匿名) @ vue-router.esm.js:1979 step @ vue-router.esm.js:1714 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ vue-router.esm.js:1792 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 step @ vue-router.esm.js:1721 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 beforeEnter @ index.js:47 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ index.js:64 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 replace @ vue-router.esm.js:2285 (匿名) @ vue-router.esm.js:1958 _callee$ @ index.js:78 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 (匿名) @ index.js:66 Promise.then (匿名) @ index.js:70 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 init @ vue-router.esm.js:2499 beforeCreate @ vue-router.esm.js:540 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4472 Vue$3 @ vue.esm.js:4571 ./src/main.js @ main.js:109 webpack_require @ bootstrap c8219a0eed343174f276:677 fn @ bootstrap c8219a0eed343174f276:87 0 @ department-query-dialog.vue:46 webpack_require @ bootstrap c8219a0eed343174f276:677 (匿名) @ bootstrap c8219a0eed343174f276:723 (匿名) @ bootstrap c8219a0eed343174f276:723 main.vue:189 [Vue warn]: Invalid handler for event “close”: got undefined found in —> <EquipmentDetail> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfoDetail.vue <CmmsEquipmentInfo> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfo.vue <ElTabPane> at packages/tabs/src/tab-pane.vue <ElTabs> at packages/tabs/src/tabs.vue <MainContent> at src\views\main-content.vue <Main> at src\views\main.vue <App> at src\App.vue <Root> warn @ vue.esm.js:571 updateListeners @ vue.esm.js:1957 updateComponentListeners @ vue.esm.js:2348 initEvents @ vue.esm.js:2324 (匿名) @ vue.esm.js:4470 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 patch @ vue.esm.js:5879 (匿名) @ vue.esm.js:2562 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 Watcher @ vue.esm.js:3022 mountComponent @ vue.esm.js:2694 (匿名) @ vue.esm.js:8226 (匿名) @ vue.esm.js:10540 init @ vue.esm.js:3986 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 createChildren @ vue.esm.js:5496 createElm @ vue.esm.js:5401 updateChildren @ vue.esm.js:5655 patchVnode @ vue.esm.js:5735 patch @ vue.esm.js:5884 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ main.vue:189 Promise.then getUserInfo @ main.vue:184 boundFn @ vue.esm.js:187 created @ main.vue:93 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4476 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5915 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 (匿名) @ vue-router.esm.js:2508 (匿名) @ vue-router.esm.js:2507 updateRoute @ vue-router.esm.js:1997 (匿名) @ vue-router.esm.js:1875 (匿名) @ vue-router.esm.js:1984 step @ vue-router.esm.js:1714 step @ vue-router.esm.js:1721 step @ vue-router.esm.js:1721 runQueue @ vue-router.esm.js:1725 (匿名) @ vue-router.esm.js:1979 step @ vue-router.esm.js:1714 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ vue-router.esm.js:1792 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 step @ vue-router.esm.js:1721 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 beforeEnter @ index.js:47 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ index.js:64 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 replace @ vue-router.esm.js:2285 (匿名) @ vue-router.esm.js:1958 _callee$ @ index.js:78 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 (匿名) @ index.js:66 Promise.then (匿名) @ index.js:70 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 init @ vue-router.esm.js:2499 beforeCreate @ vue-router.esm.js:540 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4472 Vue$3 @ vue.esm.js:4571 ./src/main.js @ main.js:109 webpack_require @ bootstrap c8219a0eed343174f276:677 fn @ bootstrap c8219a0eed343174f276:87 0 @ department-query-dialog.vue:46 webpack_require @ bootstrap c8219a0eed343174f276:677 (匿名) @ bootstrap c8219a0eed343174f276:723 (匿名) @ bootstrap c8219a0eed343174f276:723 dictionary.js:70 (7) [‘equipment_category’, ‘equipment_subcategory’, ‘accuracy_level’, ‘ownership_type’, ‘equipment_status’, ‘storage_status’, ‘inspection_status’] cmmsEquipmentInfo.vue:465 [Vue warn]: Property or method “closeDetail” is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties. found in —> <CmmsEquipmentInfo> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfo.vue <ElTabPane> at packages/tabs/src/tab-pane.vue <ElTabs> at packages/tabs/src/tabs.vue <MainContent> at src\views\main-content.vue <Main> at src\views\main.vue <App> at src\App.vue <Root> warn @ vue.esm.js:571 warnNonPresent @ vue.esm.js:1845 get @ vue.esm.js:1888 render @ cmmsEquipmentInfo.vue:465 (匿名) @ vue.esm.js:4390 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ main.vue:189 Promise.then getUserInfo @ main.vue:184 boundFn @ vue.esm.js:187 created @ main.vue:93 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4476 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5915 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 (匿名) @ vue-router.esm.js:2508 (匿名) @ vue-router.esm.js:2507 updateRoute @ vue-router.esm.js:1997 (匿名) @ vue-router.esm.js:1875 (匿名) @ vue-router.esm.js:1984 step @ vue-router.esm.js:1714 step @ vue-router.esm.js:1721 step @ vue-router.esm.js:1721 runQueue @ vue-router.esm.js:1725 (匿名) @ vue-router.esm.js:1979 step @ vue-router.esm.js:1714 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ vue-router.esm.js:1792 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 step @ vue-router.esm.js:1721 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 beforeEnter @ index.js:47 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ index.js:64 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 replace @ vue-router.esm.js:2285 (匿名) @ vue-router.esm.js:1958 _callee$ @ index.js:78 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 (匿名) @ index.js:66 Promise.then (匿名) @ index.js:70 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 init @ vue-router.esm.js:2499 beforeCreate @ vue-router.esm.js:540 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4472 Vue$3 @ vue.esm.js:4571 ./src/main.js @ main.js:109 webpack_require @ bootstrap c8219a0eed343174f276:677 fn @ bootstrap c8219a0eed343174f276:87 0 @ department-query-dialog.vue:46 webpack_require @ bootstrap c8219a0eed343174f276:677 (匿名) @ bootstrap c8219a0eed343174f276:723 (匿名) @ bootstrap c8219a0eed343174f276:723 main.vue:189 [Vue warn]: Invalid handler for event “close”: got undefined found in —> <EquipmentDetail> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfoDetail.vue <CmmsEquipmentInfo> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfo.vue <ElTabPane> at packages/tabs/src/tab-pane.vue <ElTabs> at packages/tabs/src/tabs.vue <MainContent> at src\views\main-content.vue <Main> at src\views\main.vue <App> at src\App.vue <Root> warn @ vue.esm.js:571 updateListeners @ vue.esm.js:1957 updateComponentListeners @ vue.esm.js:2348 updateChildComponent @ vue.esm.js:2758 prepatch @ vue.esm.js:3997 patchVnode @ vue.esm.js:5724 updateChildren @ vue.esm.js:5632 patchVnode @ vue.esm.js:5735 patch @ vue.esm.js:5884 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ main.vue:189 Promise.then getUserInfo @ main.vue:184 boundFn @ vue.esm.js:187 created @ main.vue:93 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4476 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5915 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 (匿名) @ vue-router.esm.js:2508 (匿名) @ vue-router.esm.js:2507 updateRoute @ vue-router.esm.js:1997 (匿名) @ vue-router.esm.js:1875 (匿名) @ vue-router.esm.js:1984 step @ vue-router.esm.js:1714 step @ vue-router.esm.js:1721 step @ vue-router.esm.js:1721 runQueue @ vue-router.esm.js:1725 (匿名) @ vue-router.esm.js:1979 step @ vue-router.esm.js:1714 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ vue-router.esm.js:1792 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 step @ vue-router.esm.js:1721 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 beforeEnter @ index.js:47 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ index.js:64 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 replace @ vue-router.esm.js:2285 (匿名) @ vue-router.esm.js:1958 _callee$ @ index.js:78 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 (匿名) @ index.js:66 Promise.then (匿名) @ index.js:70 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 init @ vue-router.esm.js:2499 beforeCreate @ vue-router.esm.js:540 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4472 Vue$3 @ vue.esm.js:4571 ./src/main.js @ main.js:109 webpack_require @ bootstrap c8219a0eed343174f276:677 fn @ bootstrap c8219a0eed343174f276:87 0 @ department-query-dialog.vue:46 webpack_require @ bootstrap c8219a0eed343174f276:677 (匿名) @ bootstrap c8219a0eed343174f276:723 (匿名) @ bootstrap c8219a0eed343174f276:723 cmmsEquipmentInfo.vue:465 [Vue warn]: Property or method “closeDetail” is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties. found in —> <CmmsEquipmentInfo> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfo.vue <ElTabPane> at packages/tabs/src/tab-pane.vue <ElTabs> at packages/tabs/src/tabs.vue <MainContent> at src\views\main-content.vue <Main> at src\views\main.vue <App> at src\App.vue <Root> warn @ vue.esm.js:571 warnNonPresent @ vue.esm.js:1845 get @ vue.esm.js:1888 render @ cmmsEquipmentInfo.vue:465 (匿名) @ vue.esm.js:4390 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 _callee$ @ cmmsEquipmentInfo.vue:339 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:28 Promise.then step @ asyncToGenerator.js:27 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 getDataList @ cmmsEquipmentInfo.vue:346 boundFn @ vue.esm.js:187 activated @ cmmsEquipmentInfo.vue:316 callHook @ vue.esm.js:2817 activateChildComponent @ vue.esm.js:2792 insert @ vue.esm.js:4022 invokeInsertHook @ vue.esm.js:5759 patch @ vue.esm.js:5964 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ main.vue:189 Promise.then getUserInfo @ main.vue:184 boundFn @ vue.esm.js:187 created @ main.vue:93 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4476 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5915 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 (匿名) @ vue-router.esm.js:2508 (匿名) @ vue-router.esm.js:2507 updateRoute @ vue-router.esm.js:1997 (匿名) @ vue-router.esm.js:1875 (匿名) @ vue-router.esm.js:1984 step @ vue-router.esm.js:1714 step @ vue-router.esm.js:1721 step @ vue-router.esm.js:1721 runQueue @ vue-router.esm.js:1725 (匿名) @ vue-router.esm.js:1979 step @ vue-router.esm.js:1714 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ vue-router.esm.js:1792 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 step @ vue-router.esm.js:1721 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 beforeEnter @ index.js:47 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ index.js:64 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 replace @ vue-router.esm.js:2285 (匿名) @ vue-router.esm.js:1958 _callee$ @ index.js:78 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 (匿名) @ index.js:66 Promise.then (匿名) @ index.js:70 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 init @ vue-router.esm.js:2499 beforeCreate @ vue-router.esm.js:540 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4472 Vue$3 @ vue.esm.js:4571 ./src/main.js @ main.js:109 webpack_require @ bootstrap c8219a0eed343174f276:677 fn @ bootstrap c8219a0eed343174f276:87 0 @ department-query-dialog.vue:46 webpack_require @ bootstrap c8219a0eed343174f276:677 (匿名) @ bootstrap c8219a0eed343174f276:723 (匿名) @ bootstrap c8219a0eed343174f276:723 cmmsEquipmentInfo.vue:339 [Vue warn]: Invalid handler for event “close”: got undefined found in —> <EquipmentDetail> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfoDetail.vue <CmmsEquipmentInfo> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfo.vue <ElTabPane> at packages/tabs/src/tab-pane.vue <ElTabs> at packages/tabs/src/tabs.vue <MainContent> at src\views\main-content.vue <Main> at src\views\main.vue <App> at src\App.vue <Root> warn @ vue.esm.js:571 updateListeners @ vue.esm.js:1957 updateComponentListeners @ vue.esm.js:2348 updateChildComponent @ vue.esm.js:2758 prepatch @ vue.esm.js:3997 patchVnode @ vue.esm.js:5724 updateChildren @ vue.esm.js:5632 patchVnode @ vue.esm.js:5735 patch @ vue.esm.js:5884 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 _callee$ @ cmmsEquipmentInfo.vue:339 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:28 Promise.then step @ asyncToGenerator.js:27 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 getDataList @ cmmsEquipmentInfo.vue:346 boundFn @ vue.esm.js:187 activated @ cmmsEquipmentInfo.vue:316 callHook @ vue.esm.js:2817 activateChildComponent @ vue.esm.js:2792 insert @ vue.esm.js:4022 invokeInsertHook @ vue.esm.js:5759 patch @ vue.esm.js:5964 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ main.vue:189 Promise.then getUserInfo @ main.vue:184 boundFn @ vue.esm.js:187 created @ main.vue:93 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4476 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5915 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 (匿名) @ vue-router.esm.js:2508 (匿名) @ vue-router.esm.js:2507 updateRoute @ vue-router.esm.js:1997 (匿名) @ vue-router.esm.js:1875 (匿名) @ vue-router.esm.js:1984 step @ vue-router.esm.js:1714 step @ vue-router.esm.js:1721 step @ vue-router.esm.js:1721 runQueue @ vue-router.esm.js:1725 (匿名) @ vue-router.esm.js:1979 step @ vue-router.esm.js:1714 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ vue-router.esm.js:1792 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 step @ vue-router.esm.js:1721 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 beforeEnter @ index.js:47 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ index.js:64 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 replace @ vue-router.esm.js:2285 (匿名) @ vue-router.esm.js:1958 _callee$ @ index.js:78 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 (匿名) @ index.js:66 Promise.then (匿名) @ index.js:70 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 init @ vue-router.esm.js:2499 beforeCreate @ vue-router.esm.js:540 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4472 Vue$3 @ vue.esm.js:4571 ./src/main.js @ main.js:109 webpack_require @ bootstrap c8219a0eed343174f276:677 fn @ bootstrap c8219a0eed343174f276:87 0 @ department-query-dialog.vue:46 webpack_require @ bootstrap c8219a0eed343174f276:677 (匿名) @ bootstrap c8219a0eed343174f276:723 (匿名) @ bootstrap c8219a0eed343174f276:723 cmmsEquipmentInfo.vue:465 [Vue warn]: Property or method “closeDetail” is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties. found in —> <CmmsEquipmentInfo> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfo.vue <ElTabPane> at packages/tabs/src/tab-pane.vue <ElTabs> at packages/tabs/src/tabs.vue <MainContent> at src\views\main-content.vue <Main> at src\views\main.vue <App> at src\App.vue <Root> warn @ vue.esm.js:571 warnNonPresent @ vue.esm.js:1845 get @ vue.esm.js:1888 render @ cmmsEquipmentInfo.vue:465 (匿名) @ vue.esm.js:4390 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ cmmsEquipmentInfo.vue:383 Promise.then (匿名) @ cmmsEquipmentInfo.vue:382 F @ _export.js:36 getDictionaries @ cmmsEquipmentInfo.vue:372 boundFn @ vue.esm.js:187 activated @ cmmsEquipmentInfo.vue:317 callHook @ vue.esm.js:2817 activateChildComponent @ vue.esm.js:2792 insert @ vue.esm.js:4022 invokeInsertHook @ vue.esm.js:5759 patch @ vue.esm.js:5964 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ main.vue:189 Promise.then getUserInfo @ main.vue:184 boundFn @ vue.esm.js:187 created @ main.vue:93 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4476 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5915 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 (匿名) @ vue-router.esm.js:2508 (匿名) @ vue-router.esm.js:2507 updateRoute @ vue-router.esm.js:1997 (匿名) @ vue-router.esm.js:1875 (匿名) @ vue-router.esm.js:1984 step @ vue-router.esm.js:1714 step @ vue-router.esm.js:1721 step @ vue-router.esm.js:1721 runQueue @ vue-router.esm.js:1725 (匿名) @ vue-router.esm.js:1979 step @ vue-router.esm.js:1714 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ vue-router.esm.js:1792 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 step @ vue-router.esm.js:1721 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 beforeEnter @ index.js:47 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ index.js:64 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 replace @ vue-router.esm.js:2285 (匿名) @ vue-router.esm.js:1958 _callee$ @ index.js:78 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 (匿名) @ index.js:66 Promise.then (匿名) @ index.js:70 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 init @ vue-router.esm.js:2499 beforeCreate @ vue-router.esm.js:540 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4472 Vue$3 @ vue.esm.js:4571 ./src/main.js @ main.js:109 webpack_require @ bootstrap c8219a0eed343174f276:677 fn @ bootstrap c8219a0eed343174f276:87 0 @ department-query-dialog.vue:46 webpack_require @ bootstrap c8219a0eed343174f276:677 (匿名) @ bootstrap c8219a0eed343174f276:723 (匿名) @ bootstrap c8219a0eed343174f276:723 cmmsEquipmentInfo.vue:383 [Vue warn]: Invalid handler for event “close”: got undefined found in —> <EquipmentDetail> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfoDetail.vue <CmmsEquipmentInfo> at src\views\modules\cmmsEquipmentInfo\cmmsEquipmentInfo.vue <ElTabPane> at packages/tabs/src/tab-pane.vue <ElTabs> at packages/tabs/src/tabs.vue <MainContent> at src\views\main-content.vue <Main> at src\views\main.vue <App> at src\App.vue <Root> warn @ vue.esm.js:571 updateListeners @ vue.esm.js:1957 updateComponentListeners @ vue.esm.js:2348 updateChildComponent @ vue.esm.js:2758 prepatch @ vue.esm.js:3997 patchVnode @ vue.esm.js:5724 updateChildren @ vue.esm.js:5632 patchVnode @ vue.esm.js:5735 patch @ vue.esm.js:5884 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ cmmsEquipmentInfo.vue:383 Promise.then (匿名) @ cmmsEquipmentInfo.vue:382 F @ _export.js:36 getDictionaries @ cmmsEquipmentInfo.vue:372 boundFn @ vue.esm.js:187 activated @ cmmsEquipmentInfo.vue:317 callHook @ vue.esm.js:2817 activateChildComponent @ vue.esm.js:2792 insert @ vue.esm.js:4022 invokeInsertHook @ vue.esm.js:5759 patch @ vue.esm.js:5964 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 proxySetter @ vue.esm.js:3225 (匿名) @ main.vue:189 Promise.then getUserInfo @ main.vue:184 boundFn @ vue.esm.js:187 created @ main.vue:93 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4476 VueComponent @ vue.esm.js:4646 createComponentInstanceForVnode @ vue.esm.js:4163 init @ vue.esm.js:3980 createComponent @ vue.esm.js:5425 createElm @ vue.esm.js:5361 patch @ vue.esm.js:5915 (匿名) @ vue.esm.js:2572 updateComponent @ vue.esm.js:2690 get @ vue.esm.js:3033 run @ vue.esm.js:3110 flushSchedulerQueue @ vue.esm.js:2876 (匿名) @ vue.esm.js:1783 flushCallbacks @ vue.esm.js:1704 Promise.then microTimerFunc @ vue.esm.js:1752 nextTick @ vue.esm.js:1796 queueWatcher @ vue.esm.js:2963 update @ vue.esm.js:3100 notify @ vue.esm.js:677 reactiveSetter @ vue.esm.js:994 (匿名) @ vue-router.esm.js:2508 (匿名) @ vue-router.esm.js:2507 updateRoute @ vue-router.esm.js:1997 (匿名) @ vue-router.esm.js:1875 (匿名) @ vue-router.esm.js:1984 step @ vue-router.esm.js:1714 step @ vue-router.esm.js:1721 step @ vue-router.esm.js:1721 runQueue @ vue-router.esm.js:1725 (匿名) @ vue-router.esm.js:1979 step @ vue-router.esm.js:1714 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ vue-router.esm.js:1792 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 step @ vue-router.esm.js:1721 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 beforeEnter @ index.js:47 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 (匿名) @ vue-router.esm.js:1718 (匿名) @ vue-router.esm.js:1964 (匿名) @ index.js:64 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 replace @ vue-router.esm.js:2285 (匿名) @ vue-router.esm.js:1958 _callee$ @ index.js:78 tryCatch @ runtime.js:62 invoke @ runtime.js:296 (匿名) @ runtime.js:114 step @ asyncToGenerator.js:17 (匿名) @ asyncToGenerator.js:35 F @ _export.js:36 (匿名) @ asyncToGenerator.js:14 (匿名) @ index.js:66 Promise.then (匿名) @ index.js:70 iterator @ vue-router.esm.js:1943 step @ vue-router.esm.js:1717 runQueue @ vue-router.esm.js:1725 confirmTransition @ vue-router.esm.js:1972 transitionTo @ vue-router.esm.js:1874 init @ vue-router.esm.js:2499 beforeCreate @ vue-router.esm.js:540 callHook @ vue.esm.js:2817 (匿名) @ vue.esm.js:4472 Vue$3 @ vue.esm.js:4571 ./src/main.js @ main.js:109 webpack_require @ bootstrap c8219a0eed343174f276:677 fn @ bootstrap c8219a0eed343174f276:87 0 @ department-query-dialog.vue:46 webpack_require @ bootstrap c8219a0eed343174f276:677 (匿名) @ bootstrap c8219a0eed343174f276:723 (匿名) @ bootstrap c8219a0eed343174f276:723
06-10
<template> <view class="detail" :style="'height: '+ windowHeight +'px;'"> <swiper class="swipers" :current="current" :vertical="true" :circular="true" @change="swiperChange"> <swiper-item class="swipers-item" v-for="(item, index) in displaySwiperList" :key="index"> <com-video :key="tableTimeStamp" :ref="`videoRef-${item.id}`" :height="videoHeight" :vinfo="vodinfo" :item="item" :qingping="isqp" :current="current" :index="index" @ended="onEnded" @onPause="onPause" @onPlay="onPlay" v-if="current==index"></com-video> <view v-if="item.pays==1" class="playbtnbox" :style="{height:`${videoHeight}px`}"> <view class="unlockbtn" @click.stop="needpay()"> <text class="unlockbtn-txt">当前剧集需要解锁</text> </view> </view> <view class="swiper-selbar"> <view class="selvideo" @click.stop="sellxj()"> <view class="swipers-items-info-num">{{item.namets}}</view> <image src="@/static/up.png" class="selicon"></image> </view> <view class="swipers-items-qpimg" @click.stop="qingping()"> <uni-icons v-if="isqp" type="checkbox" size="24" color="#666"></uni-icons> <uni-icons v-else type="close" size="24" color="#666"></uni-icons> </view> </view> </swiper-item> </swiper> <uni-popup type="bottom" ref="select"> <view class="list"> <view class="list-top"> <image :src="vodinfo.img" class="list-top-img"></image> <view class="list-top-text"> <view> <text class="list-top-title">{{vodinfo.title}}</text> </view> <view> <text class="list-top-info">{{vodinfo.upstatus}} , 共{{total}}集</text> </view> </view> <uni-icons class="downicon" type="down" color="#ff007f" @click="down()"></uni-icons> </view> <view class="listtab"> <text class="listtab-txt" :style="tabindex == 0?'color:#333':''" @tap="changetab(0)">选集</text> <text class="listtab-txt" :style="tabindex == 1?'color:#333':''" @tap="changetab(1)">简介</text> </view> <scroll-view class="listwrap" v-if="tabindex == 0" :scroll-y="true" :scroll-top="scrollTop"> <view class="list-box"> <block v-for="(medias,index) in originList" :key="index"> <view @click="selectThisVideo(index)" class="list-box-item" :style="(index+1)%6 == 0?'margin-right:0':''"> <view class="list-box-item-info" :style="index == originIndex?'background-color:#fee9f8':''"> <view class="item_suo_box" v-if="medias.pays==1"> <uni-icons class="item_suo" type="locked" color="#ff007f"></uni-icons> </view> <text class="item_name" :style="index == originIndex?'color:#ff007f':''">{{index+1}}</text> </view> </view> </block> </view> </scroll-view> <scroll-view :scroll-y="true" v-if="tabindex == 1" class="voddesc"> <mp-html :content="vodinfo.info" container-style="color: #333;" /> </scroll-view> </view> </uni-popup> <!--弹窗广告--> <uni-popup ref="popupad" type="bottom"> <view class="custom_ad"> <view class="status_bar" :style="{'height':statusBarHeight+'px'}">状态栏</view> <view class="toptip"> <text class="adtip">AD | {{second}} {{second_tip}}</text> <text @click="closeAd()" class="adclose">关闭</text> </view> <view class="adcon" :style="{'height':(windowHeight-statusBarHeight-44)+'px'}"> <image v-if="adinfo.type =='image'" class="adimg" mode="aspectFit" :src="adinfo.src"></image> <video class="adimg" object-fit="cover" v-else :src="adinfo.src" autoplay="true" controls="false"></video> <cover-view class="adlink" @tap="clickAd()"></cover-view> </view> </view> </uni-popup> <uni-popup ref="popupbuy" type="bottom"> <charge-dialog :vid="vid" :serialNo="serialno" :mid="mid" :adunlock="adunlock" @Adunlock="freebyad" @watchClose="chargeClose" > </charge-dialog> </uni-popup> </view> </template> <script> import request from "@/common/request.js" var adtmjs,rewardedVideoAd import { mapActions } from 'vuex' export default { data() { return { vodinfo:[], total:0, originList: [], // 源数据 displaySwiperList: [], // swiper需要的数据 displayIndex: 0, // 用于显示swiper的真正的下标数值只有:0,1,2。 originIndex: 0, // 记录源数据的下标 windowHeight:0, videoHeight:0, statusBarHeight:0, current:0, isqp:false,//清屏 buyindex:0,//解锁集索引 scrollTop:0, vid: 0, serialno:0,//第几集 mid: 0,//单集ID uscore:0, priced:0,//单集价格 priceq:0,//全集价格 ad_isLoaded:false, adpid:'', mpadid:'', adunlock:0,//广告解锁开关 ad_unlock_vids:[],//广告解锁剧集 unlocknum:1,//解锁集数 second:60,//广告时间 second_tip:'秒后可获得奖励', adinfo:[],//平台广告 tabindex:0, timer: null } }, onLoad(e) { if(e.invitecode){ uni.setStorageSync('invitecode',e.invitecode) } if(e.vid>0){ this.vid = parseInt(e.vid) } if(e.mid>0){ this.mid = parseInt(e.mid) } if(e.serialno>0){ this.serialno = parseInt(e.serialno) } //缓存的解锁剧集 if(uni.getStorageSync("ad_unlock_vids")){ this.ad_unlock_vids = uni.getStorageSync("ad_unlock_vids") } this.config(); this.videoinfo(); }, onReady() { // 使用同步方法获取系统信息 const systemInfo = uni.getSystemInfoSync(); this.statusBarHeight = systemInfo.statusBarHeight; // 获取安全区域信息 const safeArea = systemInfo.safeArea; // 底部安全高度(注意:这里假设safeArea.bottom是相对于屏幕底部的安全距离) const safeHeight = safeArea.bottom ? safeArea.bottom : 0; this.windowHeight = systemInfo.windowHeight this.videoHeight = safeHeight-65 }, methods: { ...mapActions(['getConfig']), async config(){ let sitecfg = await this.getConfig() if(sitecfg && sitecfg.site.adunlock==1){ this.adunlock = parseInt(sitecfg.site.adunlock) this.unlocknum = sitecfg.site.adunlock_num this.adpid = sitecfg.site.appad.adpid;//app奖励广告adpid this.createAd(); } }, //加载剧集 async videoinfo(){ let that=this let data = {}; data.vid= parseInt(this.vid) let [err,res] =await request.get('/api/video/videoinfo',data,{token:true}); if(res.data.total){ this.vodinfo = res.data.info uni.setNavigationBarTitle({ title: this.vodinfo.title }); this.total = res.data.total//总集数 var msg = res.data.data var midlog = res.data.midlog //观看历史记录视频id //2.这里把视频添加到视频列表 for (let i = 0; i < msg.length; i++) { msg[i].vid = msg[i].pid if(that.serialno>0){ if(i == that.serialno-1){ that.originIndex=i } }else if(msg[i].mid==that.mid){ that.originIndex=i }else{ if(msg[i].mid == midlog){ that.originIndex=i } } //判断是否广告解锁 if(msg[i].pays==1 && that.ad_unlock_vids.indexOf(msg[i].pid+'_'+msg[i].mid) !=-1){ msg[i].pays = 2 } } that.originList = msg that.initSwiperData(that.originIndex); }else{ uni.showToast({ title: '加载出现错误',icon:"none" }); setTimeout(function(){ uni.navigateTo({ url:'/pages/index/index' }) },1000) } }, createAd(){ // #ifndef H5 let userId = this.memberInfo?this.memberInfo.id:0; if (this.adpid || this.mpadid){ rewardedVideoAd = uni.createRewardedVideoAd({ adpid: this.adpid, urlCallback: { // 服务器回调透传参数 userId: userId, extra: 'testdata' } }) rewardedVideoAd.onLoad(() => { this.ad_isLoaded = true console.log('onLoad event') // 当激励视频被关闭时,默认预载下一条数据,加载完成时仍然触发 `onLoad` 事件 }) rewardedVideoAd.onError((err) => { console.log('onError event', err) }) rewardedVideoAd.onClose(res => { if (res && res.isEnded) { // 正常播放结束 this.adEnded() } else { // 播放中途退出 } }) } // #endif }, //广告解锁 async freebyad(){ let that=this this.chargeClose(); if (this.ad_isLoaded) { rewardedVideoAd.show() }else{ //随机取一个广告 let data={} let [err,res] =await request.get('/api/index/rewardad',data); if(res.data.code==1){ this.adinfo=res.data.data } this.$refs.popupad.open('bottom'); clearInterval(adtmjs) this.second=30 //广告时间 adtmjs = setInterval(() => { this.second-- if (this.second == 0) { clearInterval(adtmjs) adtmjs = null this.second='' this.second_tip='已获得奖励' } }, 1000); } }, closeAd(){ this.$refs.popupad.close(); if(this.second==''){ this.adEnded() } }, clickAd(){ if(!this.adinfo.link){ return } if(this.adinfo.linktype==1){ uni.navigateTo({ url:'/pages/index/webva?url='+encodeURIComponent(this.adinfo.link) }) }else{ uni.navigateTo({ url:this.adinfo.link }) } }, //激励广告执行解锁 adEnded(){ var curindex = this.buyindex for (let i=0;i<this.unlocknum;i++) { if(!this.originList[curindex]){ break } let info=this.originList[curindex] let ad_vid=info.pid+'_'+info.id; if(this.ad_unlock_vids.indexOf(ad_vid)==-1){ this.ad_unlock_vids.push(ad_vid) } curindex++ } uni.setStorageSync("ad_unlock_vids",this.ad_unlock_vids) this.unlocked() uni.showToast({ title: '剧集解锁成功', icon:'none' }) }, //选集播放 selectThisVideo(index){ this.down(); this.duration = 20; this.originIndex=index this.initSwiperData(index); setTimeout(()=>{ this.duration = 500; },500) }, down(){ this.$refs.select.close(); }, chargeClose(){ this.$refs.popupbuy.close(); }, sellxj() { this.$refs.select.open('bottom'); }, needpay(){ if(this.originList[this.originIndex].pays==1){ this.buyindex=this.originIndex this.$refs.popupbuy.open('bottom'); return } }, //解锁成功 unlocked(){ console.log(this.buyindex,this.current) //刷新数据,判断是否广告解锁 for (let i=0;i<this.originList.length;i++) { let pid=this.originList[i].pid let mid=this.originList[i].mid if(this.originList[i].pays==1 && this.ad_unlock_vids.indexOf(pid+'_'+mid) !=-1){ this.originList[i].pays = 2 } } this.selectThisVideo(this.buyindex) }, qingping(){ this.isqp=!this.isqp }, onPlay(){ this.timer = setTimeout(()=>{ this.isqp=true },3000) }, onPause(){ this.isqp=false clearTimeout(this.timer); }, onEnded() { if(this.displayIndex<2){ this.current=this.displayIndex+1 }else{ this.current=0 } }, changetab(index){ this.tabindex=index }, /** * 初始一个显示的swiper数据 * originIndex 从源数据的哪个开始显示默认0,如从其他页面跳转进来,要显示第n个,这个参数就是他的下标 */ async initSwiperData(originIndex = this.originIndex) { const originListLength = this.originList.length; // 源数据长度 const displayList = []; displayList[this.displayIndex] = this.originList[originIndex]; displayList[this.displayIndex - 1 == -1 ? 2 : this.displayIndex - 1] = this.originList[originIndex - 1 == -1 ? originListLength - 1 : originIndex - 1]; displayList[this.displayIndex + 1 == 3 ? 0 : this.displayIndex + 1] = this.originList[originIndex + 1 == originListLength ? 0 : originIndex + 1]; this.displaySwiperList = displayList; this.tableTimeStamp = new Date().getTime(); //正在播放集数 this.mid = this.originList[originIndex].mid this.serialno = parseInt(originIndex+1)//集数 this.needpay() }, /** * swiper滑动时候 */ swiperChange(event) { this.circular=true const { current } = event.detail; this.current = current const originListLength = this.originList.length; // 源数据长度 // =============向后========== if (this.displayIndex - current == 2 || this.displayIndex - current == -1) { this.originIndex = this.originIndex + 1 == originListLength ? 0 : this.originIndex + 1; this.displayIndex = this.displayIndex + 1 == 3 ? 0 : this.displayIndex + 1; this.initSwiperData(this.originIndex); } // ======如果两者的差为-2或者1则是向前滑动============ else if (this.displayIndex - current == -2 || this.displayIndex - current == 1) { this.originIndex = this.originIndex - 1 == -1 ? originListLength - 1 : this.originIndex - 1; this.displayIndex = this.displayIndex - 1 == -1 ? 2 : this.displayIndex - 1; this.initSwiperData(this.originIndex); } } } } </script> <style> .detail { background-color: #000; position: relative; } .topbar{ width:100%; position: absolute; top:0; z-index:100; } .swipers { height:100%; } .swipers-items{ position: relative; } .swipers-items-video { width:100%; } .swipers-items-imgsbg { width: 100%; height:100%; border-radius: 0 0 25rpx 25rpx; } .playbtnbox{ width:100%; position: absolute; top:0; z-index:1; display: flex; justify-content: center; align-items: center; background-color: rgba(0, 0, 0,0.6); } .playState{ width: 160rpx; height: 160rpx; opacity: 0.8; } .unlockbtn{ padding:10upx 20upx; border-radius:50rpx; background-color: #ff007f; } .unlockbtn-txt{ color:white; font-size:28rpx; } .swipers-items-info { width: 600rpx; position: absolute; bottom: 200rpx; left: 20rpx; color: #ffffff; z-index: 1; } .swipers-items-info-title{ display: flex; flex-direction: row; align-items: center; } .swipers-items-info-img{ width:60rpx; height:80rpx; border-radius: 10rpx; } .swipers-items-info-name{ color: #ffffff; font-size: 28rpx; margin-left: 20rpx; } .swipers-items-info-content { font-size: 26rpx; color: #ffffff; overflow: hidden; margin-top: 10rpx; border-radius: 10rpx; } .swiper-selbar{ margin-top: 20rpx; display: flex; height:100rpx; align-items: center; } .selvideo{ width:100%; position: relative; } .selicon{ z-index: 1; width:60rpx; height:60rpx; position: absolute; top:35rpx; right: 50rpx; } .swipers-items-info-num { margin: 30rpx; color: #ffffff; font-size: 28rpx; background-color: #1a1a1a; border-radius: 10rpx; padding: 20rpx; opacity: 1; } .swipers-items-qpimg{ margin-right:15rpx; } .swipers-items-right { z-index: 1; width: 70rpx; position: absolute; right: 20rpx; bottom: 300rpx; z-index: 999; } .swipers-items-right-item { margin-bottom: 20rpx; text-align: center; } .swipers-items-right-item-img { width: 60rpx; height: 60rpx; margin-left:5rpx } .swipers-items-right-item-txt { text-align: center; font-size: 20rpx; color: #ffffff; } .share-btn{ z-index: 1; position: absolute; width: 60rpx; height: 60rpx; border: 0; background-color: transparent; } .list { background:#ffffff; padding:20upx; border-radius: 20upx 20upx 0 0; } .list-top { display: flex; flex-direction: row; } .list-top-img { width: 130upx; height: 160upx; border-radius: 10rpx; } .list-top-text { padding-left: 30rpx; padding-right: 30rpx; } .list-top-title { font-size:28upx; } .list-top-info { font-size:24upx; color:#999; margin-top: 20upx; } .listwrap{ width: 710upx; height: 500upx; } .list-item { padding: 0 30rpx; } .list-item-box { line-height: 90rpx; background-color: #fff; color: #000; font-weight: bold; text-align: center; margin-bottom: 40rpx; border-radius: 20rpx; } .list-box { width:710rpx; display:flex; flex-wrap: wrap; /* 允许换行 */ flex-direction: row; padding-top: 20upx; align-items: center; /* 子元素在交叉轴上的对齐方式 */ } .list-box-item { position: relative; text-align: center; margin: 0 20upx 20upx 0; height: 80upx; width: 100upx; overflow: hidden; background-color: #F2F5F7; border-radius: 5upx; } .item_name{ line-height: 80upx; font-size: 36rpx; text-align: center; } .item_suo_box{ position: absolute; z-index: 1; top:0; right:0; width: 36upx; height: 36upx; background-color: #e7e7e7; border-radius: 0 10rpx; } .flex_row{ display: flex; align-items: center; } .downicon { width: 30px; height: 30px; margin-top: 5px; position: absolute; z-index: 1; right: 10px; } .custom_ad{ width: 750rpx; position: relative; background-color: #000; } .toptip{ display: flex; flex-direction: row; justify-content: space-between; padding:20rpx; background-color: #000; } .adtip,.adclose{ color:#ccc; font-size: 12px; border: solid 1px #eee; border-radius: 10px; padding: 2px 5px; background-color: #333; } .adcon{ position: relative; display: flex; flex-direction: column; } .adimg{ /* #ifndef APP */ width: 100%; height: 100%; /* #endif */ /* #ifdef APP */ flex:1; width:750rpx; /* #endif */ } .adlink{ position: absolute; top:0; bottom: 0; left:0; right:0; z-index: 1000; } .listtab{ display: flex; flex-direction: row; padding:15rpx 0; } .listtab-txt{ font-size:32upx; padding:0 10upx; color: #999; } .voddesc{ font-size:28upx; padding: 0 10rpx; color: #333; height: 500upx; } </style> chunk-vendors.js:20712 [Vue warn]: Property or method "onError" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties. found in ---> <OVideo> at components/common/video.vue at pages/video/detail.vue warn @ chunk-vendors.js:20712 warnNonPresent @ chunk-vendors.js:22116 get @ chunk-vendors.js:22171 error @ pages-video-detail~pages-video-video.js:2447 invokeWithErrorHandling @ chunk-vendors.js:21955 invoker @ chunk-vendors.js:22280 invokeWithErrorHandling @ chunk-vendors.js:21955 Vue.$emit @ chunk-vendors.js:24024 $trigger @ chunk-vendors.js:19677 onVideoError @ chunk-vendors.js:19677 invokeWithErrorHandling @ chunk-vendors.js:21955 invoker @ chunk-vendors.js:22280 original._wrapper @ chunk-vendors.js:27164 error (async) add$1 @ chunk-vendors.js:27168 updateListeners @ chunk-vendors.js:22312 updateDOMListeners @ chunk-vendors.js:27198 invokeCreateHooks @ chunk-vendors.js:26207 createElm @ chunk-vendors.js:26094 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 addVnodes @ chunk-vendors.js:26247 updateChildren @ chunk-vendors.js:26374 patchVnode @ chunk-vendors.js:26460 updateChildren @ chunk-vendors.js:26334 patchVnode @ chunk-vendors.js:26460 updateChildren @ chunk-vendors.js:26334 patchVnode @ chunk-vendors.js:26460 updateChildren @ chunk-vendors.js:26334 patchVnode @ chunk-vendors.js:26460 patch @ chunk-vendors.js:26623 Vue._update @ chunk-vendors.js:24084 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 run @ chunk-vendors.js:24696 flushSchedulerQueue @ chunk-vendors.js:24452 (anonymous) @ chunk-vendors.js:22081 flushCallbacks @ chunk-vendors.js:22007 Promise.then (async) timerFunc @ chunk-vendors.js:22034 nextTick @ chunk-vendors.js:22091 queueWatcher @ chunk-vendors.js:24544 update @ chunk-vendors.js:24686 notify @ chunk-vendors.js:20826 reactiveSetter @ chunk-vendors.js:21158 proxySetter @ chunk-vendors.js:24773 _callee2$ @ detail.vue:185 tryCatch @ chunk-vendors.js:5954 (anonymous) @ chunk-vendors.js:6035 (anonymous) @ chunk-vendors.js:5979 asyncGeneratorStep @ chunk-vendors.js:6408 _next @ chunk-vendors.js:6427 Promise.then (async) asyncGeneratorStep @ chunk-vendors.js:6417 _next @ chunk-vendors.js:6427 (anonymous) @ chunk-vendors.js:6432 (anonymous) @ chunk-vendors.js:6424 videoinfo @ detail.vue:221 onLoad @ detail.vue:153 invokeWithErrorHandling @ chunk-vendors.js:21955 push.m44O.Vue.__call_hook @ chunk-vendors.js:28703 r @ chunk-vendors.js:19677 a @ chunk-vendors.js:19677 created @ chunk-vendors.js:19677 invokeWithErrorHandling @ chunk-vendors.js:21955 callHook @ chunk-vendors.js:24361 Vue._init @ chunk-vendors.js:25146 VueComponent @ chunk-vendors.js:25292 createComponentInstanceForVnode @ chunk-vendors.js:23422 init @ chunk-vendors.js:23251 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 addVnodes @ chunk-vendors.js:26247 updateChildren @ chunk-vendors.js:26374 patchVnode @ chunk-vendors.js:26460 updateChildren @ chunk-vendors.js:26334 patchVnode @ chunk-vendors.js:26460 patch @ chunk-vendors.js:26623 Vue._update @ chunk-vendors.js:24084 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 run @ chunk-vendors.js:24696 flushSchedulerQueue @ chunk-vendors.js:24452 (anonymous) @ chunk-vendors.js:22081 flushCallbacks @ chunk-vendors.js:22007 Promise.then (async) timerFunc @ chunk-vendors.js:22034 nextTick @ chunk-vendors.js:22091 queueWatcher @ chunk-vendors.js:24544 update @ chunk-vendors.js:24686 Vue.$forceUpdate @ chunk-vendors.js:24105 forceRender @ chunk-vendors.js:23783 (anonymous) @ chunk-vendors.js:23805 (anonymous) @ chunk-vendors.js:20429 (anonymous) @ index.js:1505 Promise.then (async) (anonymous) @ index.js:1504 resolveAsyncComponent @ chunk-vendors.js:23822 createComponent @ chunk-vendors.js:23339 _createElement @ chunk-vendors.js:23561 createElement @ chunk-vendors.js:23492 vm.$createElement @ chunk-vendors.js:23633 render @ index.js:2505 Vue._render @ chunk-vendors.js:23684 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 patch @ chunk-vendors.js:26657 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 eval @ main.js:28 V+zZ @ index.js:1190 __webpack_require__ @ index.js:854 fn @ index.js:151 1 @ index.js:1037 __webpack_require__ @ index.js:854 checkDeferredModules @ index.js:46 (anonymous) @ index.js:994 (anonymous) @ index.js:997 Show 149 more frames chunk-vendors.js:20712 [Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'apply' of undefined" found in ---> <OVideo> at components/common/video.vue at pages/video/detail.vue warn @ chunk-vendors.js:20712 e.config.errorHandler @ chunk-vendors.js:19677 globalHandleError @ chunk-vendors.js:21971 handleError @ chunk-vendors.js:21940 invokeWithErrorHandling @ chunk-vendors.js:21963 invoker @ chunk-vendors.js:22280 invokeWithErrorHandling @ chunk-vendors.js:21955 Vue.$emit @ chunk-vendors.js:24024 $trigger @ chunk-vendors.js:19677 onVideoError @ chunk-vendors.js:19677 invokeWithErrorHandling @ chunk-vendors.js:21955 invoker @ chunk-vendors.js:22280 original._wrapper @ chunk-vendors.js:27164 error (async) add$1 @ chunk-vendors.js:27168 updateListeners @ chunk-vendors.js:22312 updateDOMListeners @ chunk-vendors.js:27198 invokeCreateHooks @ chunk-vendors.js:26207 createElm @ chunk-vendors.js:26094 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 addVnodes @ chunk-vendors.js:26247 updateChildren @ chunk-vendors.js:26374 patchVnode @ chunk-vendors.js:26460 updateChildren @ chunk-vendors.js:26334 patchVnode @ chunk-vendors.js:26460 updateChildren @ chunk-vendors.js:26334 patchVnode @ chunk-vendors.js:26460 updateChildren @ chunk-vendors.js:26334 patchVnode @ chunk-vendors.js:26460 patch @ chunk-vendors.js:26623 Vue._update @ chunk-vendors.js:24084 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 run @ chunk-vendors.js:24696 flushSchedulerQueue @ chunk-vendors.js:24452 (anonymous) @ chunk-vendors.js:22081 flushCallbacks @ chunk-vendors.js:22007 Promise.then (async) timerFunc @ chunk-vendors.js:22034 nextTick @ chunk-vendors.js:22091 queueWatcher @ chunk-vendors.js:24544 update @ chunk-vendors.js:24686 notify @ chunk-vendors.js:20826 reactiveSetter @ chunk-vendors.js:21158 proxySetter @ chunk-vendors.js:24773 _callee2$ @ detail.vue:185 tryCatch @ chunk-vendors.js:5954 (anonymous) @ chunk-vendors.js:6035 (anonymous) @ chunk-vendors.js:5979 asyncGeneratorStep @ chunk-vendors.js:6408 _next @ chunk-vendors.js:6427 Promise.then (async) asyncGeneratorStep @ chunk-vendors.js:6417 _next @ chunk-vendors.js:6427 (anonymous) @ chunk-vendors.js:6432 (anonymous) @ chunk-vendors.js:6424 videoinfo @ detail.vue:221 onLoad @ detail.vue:153 invokeWithErrorHandling @ chunk-vendors.js:21955 push.m44O.Vue.__call_hook @ chunk-vendors.js:28703 r @ chunk-vendors.js:19677 a @ chunk-vendors.js:19677 created @ chunk-vendors.js:19677 invokeWithErrorHandling @ chunk-vendors.js:21955 callHook @ chunk-vendors.js:24361 Vue._init @ chunk-vendors.js:25146 VueComponent @ chunk-vendors.js:25292 createComponentInstanceForVnode @ chunk-vendors.js:23422 init @ chunk-vendors.js:23251 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 addVnodes @ chunk-vendors.js:26247 updateChildren @ chunk-vendors.js:26374 patchVnode @ chunk-vendors.js:26460 updateChildren @ chunk-vendors.js:26334 patchVnode @ chunk-vendors.js:26460 patch @ chunk-vendors.js:26623 Vue._update @ chunk-vendors.js:24084 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 run @ chunk-vendors.js:24696 flushSchedulerQueue @ chunk-vendors.js:24452 (anonymous) @ chunk-vendors.js:22081 flushCallbacks @ chunk-vendors.js:22007 Promise.then (async) timerFunc @ chunk-vendors.js:22034 nextTick @ chunk-vendors.js:22091 queueWatcher @ chunk-vendors.js:24544 update @ chunk-vendors.js:24686 Vue.$forceUpdate @ chunk-vendors.js:24105 forceRender @ chunk-vendors.js:23783 (anonymous) @ chunk-vendors.js:23805 (anonymous) @ chunk-vendors.js:20429 (anonymous) @ index.js:1505 Promise.then (async) (anonymous) @ index.js:1504 resolveAsyncComponent @ chunk-vendors.js:23822 createComponent @ chunk-vendors.js:23339 _createElement @ chunk-vendors.js:23561 createElement @ chunk-vendors.js:23492 vm.$createElement @ chunk-vendors.js:23633 render @ index.js:2505 Vue._render @ chunk-vendors.js:23684 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 createChildren @ chunk-vendors.js:26191 createElm @ chunk-vendors.js:26092 patch @ chunk-vendors.js:26618 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 init @ chunk-vendors.js:23255 createComponent @ chunk-vendors.js:26116 createElm @ chunk-vendors.js:26063 patch @ chunk-vendors.js:26657 Vue._update @ chunk-vendors.js:24081 updateComponent @ chunk-vendors.js:24202 get @ chunk-vendors.js:24621 Watcher @ chunk-vendors.js:24610 mountComponent @ chunk-vendors.js:24209 push.m44O.Vue.$mount @ chunk-vendors.js:28719 eval @ main.js:28 V+zZ @ index.js:1190 __webpack_require__ @ index.js:854 fn @ index.js:151 1 @ index.js:1037 __webpack_require__ @ index.js:854 checkDeferredModules @ index.js:46 (anonymous) @ index.js:994 (anonymous) @ index.js:997 Show 149 more frames chunk-vendors.js:19677 [system] TypeError: Cannot read property 'apply' of undefined at error (pages-video-detail~pages-video-video.js:2447) at invokeWithErrorHandling (chunk-vendors.js:21955) at VueComponent.invoker (chunk-vendors.js:22280) at invokeWithErrorHandling (chunk-vendors.js:21955) at VueComponent.Vue.$emit (chunk-vendors.js:24024) at VueComponent.$trigger (chunk-vendors.js:19677) at VueComponent.onVideoError (chunk-vendors.js:19677) at invokeWithErrorHandling (chunk-vendors.js:21955) at HTMLVideoElement.invoker (chunk-vendors.js:22280) at HTMLVideoElement.original._wrapper (chunk-vendors.js:27164)
最新发布
10-21
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值