vue(前端、页面)ErrorPart01、知识

脚本要放在div后面
无需引入jar包
代理路径在项目/config/index.js
axios类似ajax
vuex全局状态管理 类似applicationContext 可以管理全局的状态,并进行修改处理
map通过xxx['属性名']来获取其中的内容
render页面中没有显示需要  return h('span', xxx)
通过页面F12进行微调快
设置为国内镜像 安装快 使用cnpm 安装
	npm install -g cnpm --registry=https://registry.npm.taobao.org
如果修改自己使用的组件却没有生效【console.log 没什么用】 可能是因为引用的组件并不是自己的组件,被别的组件给覆盖了

目录结构

src文件夹放置组件和入口文件
static文件夹放置静态资源文件
index.html为文件入口
main.js 程序入口文件,所有的全局性配置都在这个文件中进行

vue(前端、页面)ErrorPart01、知识_第1张图片
插件

babel-plugin-import 插件可以从插件库中引入需要的模块,而不是把整个库都引入,从而提高性能
v-track-event 百度统计插件

npm

1、4058
	干掉项目文件夹下的node_modules,然后重新npm install

知识

0、ECMAScript6.0 简称ES6 是JavaScript的下一代标准
1、const和let的作用域相同,只在声明的块级作用域生效,不支持变量提升(没有var之前便存在,没有值返回undefined),保证变量不会影响全局变量
2、const不可变的是地址(不是常量的值不能变动),如果是复合型,比如一个对象,那么可以个改动其中的数据,不能xxx={};会报错
3、对象解构(Destructuring 从数组和对象中提取值,再对变量赋值)的内部机制,是先找到同名属性,再赋给对应的变量,真正被赋值的是后者,而不是前者
4、剩余参数语法 ...theArgs
	let arrowfunc = (...theArgs)=>console.log(theArgs.length)
	arrowfunc(1,2);//输出2
5、箭头函数的代码简洁性和不绑定调用者的this(箭头函数的this始终为定义时的this【不在对象和原型方法中定义】),在非方法函数中使用合适,如果需要动态修改this,建议不使用箭头函数
6、entries 所有成员的遍历器 let [key,value] of map.entries()   forEach 遍历Map的所有成员 map.forEach(function(value,index))
7、export default 的时候对应的import 不需要再加个{},export default 为模块的默认输出,显然一个模块只有一个默认输出,因此export default 命令只有一次,import 也可以唯一对应一个export 不需要{}
8、Web收到请求后会解析URL中的路径,在程序中,该路径会有对应的处理逻辑,程序把请求交给路径对应的处理逻辑,这样就是一次路由分发,这个分发通过路由来完成。
	之前的路由由后台来完成,即用户通过请求的url导航到具体的html页面,前端路由是通过配置js文件,把这个工作交给前端完成。
	简单说:路由就是根据不同的url地址展现不同的内容或页面
	优缺点:访问页面仅变换路径,没有延迟 用户体验很好,支持单页面应用,可以复制URL 
		缺点:前进、后退按钮会重新发送请求,没有合理的利用缓存
9、Vue Router在将单页面应用分割为功能合理的组件或者页面起了很大的作用。
10、Row在使用的时候2个i-Col连在了一起(空间充分使用) Row添加属性:gutter 再在 i-Col中添加span="xx" 各自分配空间显示
11、使用v-if 来判断是否显示该组件的时候 v-if="showAcquireCarrierBtn"
	将方法写在computed中
12、添加校验 时间校验
	:prop="'seaInfo'+'.'+'atd'"
                     :rules="[{pattern: /.+/,required: true, message:this.$t(`validate.isRequired`, {msg: this.$t(`ATD from POL`)}), trigger: 'blur,change'}]"
    this.$refs.form.validateField('seaInfo.atd') 调用检验上面一个prop 可以再加入一个回调函数
 13、emit
 	子父组件通过emit上传一个事件进行交互的时候 需要使用v-on:xxx(事件名) 或者@xxx来交互
 14、完全显示
 	在Select中添加属性transfer = transfer
 15、width配置了但是没有效果
 	vue中可能需要放在:style="`width: ${getWidth - 850}px`"
 	另外如果为负的话也无效
 16、在取到数据之后在页面却没有任何的显示
 	可能需要对对象进行初始化  在data中添加 一个xxx:[]
 17、computed的从store中拿取数据失败
 	在上方多加了一个console这个数据源导致拿取失败  去掉即可
 18、store在使用的时候需要进入到其他的页面才能够使用
 	没有进行初始化  在index页面this.$store.commit('initXxx')
 19、使用v-modal的时候使用对象的id作为绑定的对象, 因为是键值对的形式 所以 select中组件 一般会和:value对应
 20、toe样式是省略号 ,如果超出规定的长度会变成省略号
 21、console打印处数据,但是页面上不会显示,且{{}}为空数组
 	可能需要在data中进行注册 添加一个所需对象数组
 22、使用组件带的事件的话要在名字前面加@  比如 @on-popper-show
 23、style会覆盖class中的内容
 24、对象在类型转换为字符串时, toString() 的调用顺序在 valueOf() 之前,并且这两个方法如果都没有返回一个基本类型值,则抛出异常;如果返回了基本类型值 primValue,则返回 String(primValue)
 25、事件传播期间,有三个阶段:捕获,目标和冒泡。 默认情况下,事件处理程序在冒泡阶段执行(除非您将useCapture设置为true)。 它从最深的嵌套元素向外延伸
 26、select组件添加filterable的话,如果直接清空v-model的值没有触发on-change事件的话会将内容的value保留在过滤的条件当中,导致另外一个查询不出
 	添加on-change事件判断是否在可选内容当中
 27、在v-model的时候需要做好初始化工作
 28、校验的话最好在一个大对象中
 	如果直接校验一个数组的话 需要在一个对象当中 即外面加层壳然后再循环 最后校验其中的属性
 29、如果要在Table的render中加入条件的话在渲染的东西前面加上 true[表达式] && 原有内容
 30、在遍历的时候通过:key 中的属性可以用来作为该数组中最后一个对象的判断等操作
 31、select组件 label和value要对应上才会被选中?
 32、modal的遮盖层点击会触发他的@on-cancel事件 在里面可以对某些数据进行处理
 33、select 如果要使用id作为selectValue 要去掉其中的:lable属性 在option中添加{{xxx.xxxName}}
 34、null不严格等于undefined,所以如果let[x=1] =[null] 的时候x=1的默认值失效,输出x=null
 35、为什么使用而不是直接使用
 	35.1、无论是HTML5 history模式还是hash模式,他们的表现行为一致,所以当切换路由模式或者在IE9降低使用hash模式时,无须作任何变动
 	35.2、在HTML5 history模式下,会守卫单击事件,让浏览器不再重新加载页面
 	35.3、在HTML5 history模式下使用base选项之后,所有的to属性都不需要写基路径
 36、修饰符 
 	36.1、lazy
 		v-model默认是在input事件中同步输入框的数据,使用修饰符lazy会转变为在change事件中同步。
 			
 		添加lazy修饰符之后,msg并不是实时改变了,而是在失去焦点或者按下回车时更新
 	36.2、trim
 		修饰符trim可以自动过滤输入的首尾空格
37、字符串倒序显示
	msg.split('').reverse().join('')
38、遍历大数组和计算量很大的时候,使用计算属性,除非不希望得到缓存。使用methods的时候重新渲染,就会被调用。
39、使用...mapMutations等vuex相关控制的时候需要在store中把相关的方法先写好,否则会unknown mutation type
40、在actions中调用其他的action
	通过context.dispatch('xxx')  commit 也同理

watch

1、监听router里面的参数
	'$route.query.xxx'

spin

用于loading
	在它的父级添加style: absolute 或者relative 来限定它的范围



    
    vue.js
    


{{ message }}

vue初创环境
v-text,v-html,v-model异同
map
ref
v-if 和v-show
is

v-if为元素的整个删除和添加  v-show为添加一个display:none样式
v-show更适合频繁的显示或者说比较大 不容易创建的元素

问题、tips

1、el元素前面要加#
2、WEB-INF中的js需要特殊手段加载 直接放在WebContent比较方便
3、 did you register the component correctly? For recursive components, make sure to provide the "name" option.
	错误的拼写了components
4、4058 在目录里面运行 npm run dev
5、select需要点两下才改变显示
	
	在option中添加{{xx.name}}
6、router-view中只是切换模块显示 没有父子组件传递事件的功能 是同级,可以用vuex或者改成父子组件关系 即import后进行修改
7、v-bind给子组件传值的时候需要命名即v-bind:xxx('xxx') 和事件类似没有的话在子组件会显示没有查找到对应的组件
8、父组件调用子组件的方法的时候需要给子组件添上ref属性 然后在父组件通过this.$refs.orderdetaill.selectProduct()调用相应的方法
9、Invalid prop: type check failed for prop "value". Expected String, Number, got Undefined.
	在select中使用了还未出现的元素即多点了修改灰色部分即可
10、在http请求下方的currentProduct获取不到值 cannot get property xxx
	http请求慢于赋值 虽然是并排显示 但是还没接收到数据就进行赋值,所以需要放在请求之内或请求完毕之后进行赋值
11、没有正确传入值
	传入的参数名需要和接受的一样
12、校验失败,总是提示没有输入,有些感觉失效
	在form上用:model而不是v-model,失效可能是因为校验的是个对象但是直接.而不是选择其中一个所以校验失效
	另外如果不是表单中的:model中的对象,那么也无法校验 使用的话需要在对象当中也就是最上面要v-model一个对象 然后里面再用他其中的属性
	
	校验单个属性(自建的):rules="[ {required: true,validator:isContainerQtyExist, trigger: 'change' }]">	
	isContainerQtyExist (rule, value, callback) {
        let containerList = this.containerQtyCopy
        if (!containerList) {
          callback(this.$t(`isRequired`, {msg: this.$t(`containerQty`)}))
        } else {
          callback()
        }
        callback()
      },
13、弹一个提示
	this.$Message.info('创建成功')
14、子组件用props接受父组件传递过来的值
15、通过新建一个名称为总计的xxx可以在其中字段中完成总计的工作
16、使用 v-htm在搜索结果中高亮显示
17、寻找所需要修改的地方
	F12查看发出链接接受的位置 在idea中通过ctrl+shift+f 通过/xxx来找到所需的东西
18、Duplicate keys detected: '1'. This may cause an update error.
	结点没有正确的显示且客户只有一开始的那个,无法从后端获取到数据,
		可能是修改了后端的配置文件,需要重新启动后端的tomcat
19、添加个标签后 无法进入且报很多的 错误
	需要在路由中添加该路径
20、table中的东西漂浮,不在理想的位置上
	因为tr td的层次关系所以东西放在td中 一定是按照合理的顺序排放,因此 将东西放在td中 即可正常排序
21、iview中的样式 不生效 比如 Table中的show-header=false 预想去掉表头但是无效
	需要在样式前面加上:   ——》:show-header=false
22、一些简单的只读 或者没有涉及到复杂的计算的话
	可以直接使用Table来完成内容的输入
23、去掉打印的时候的页眉页脚
	23.1、通过——>页面设置,里边将页眉页脚设置为空就OK.
	23.2、在页面中添加css
	
 24、 Arrow function should not return assignment  
 	箭头函数不能返回一个任务?     反正就是修改其中的函数  用法可能出错了
 25、如果要保证一些数据并排 
 	都写在同一个i-col当中 然后另外的一排在另一个i-col中 2个i-col在同一个 row当中 这样可以实现2排较为整齐 而且右边一列可以多过左边的一列
 26、commit 一个事件到store 的时候只有一个参数显示 另外一个为undefin
 	使用括号包围上传一个对象
27、Right-hand side of 'instanceof' is not an object"
	父传子 props右边尝试不填入内容直接空字符串
28、通过this.refs.xxx.validate() 即可对组件和组件的子组件进行校验 不用定位到内部
29、let和var的区别
	let 块级定义 var 全局
30、RangeError: Maximum call stack size exceeded
	循环调用 打印的东西和方法名相同 溢出
31、props 返回中英文的
	trueLabel: {
	        type: String,
	        default: () => {
	          return $this.$t('YES')
	        }
	      },
  32、npm ERR! Unexpected token < in JSON at position 1 while parsing near ' 安装新的插件报错
  	npm cache clean --force
  33、npm install出现 npm ERR! Unexpected token , in JSON at position xxxxxxx while parsing near '
  	删掉package-lock.json 之后会重新出现
  34、因为v-model绑的值在改变后不再是原有所需要的导致页面报错【格式发生了变化】
  	在需要保存或对数据操作的时候进行deepClone对数据分开进行操作
  35、You may need an appropriate loader to handle this file type.
| {"version":3,"sources":["webpack:///webpack/universalModuleDefinition"
	出现这种问题除了组件版本未正常安装 可能是引入对应组件的时候出现的问题
		可以对照正常使用 的环境找出问题
			可能是在require的时候需要加上'.js'后缀
36、Provisional headers are shown
	在chrome中有些插件拦截了,头部的异常可以不用处理,因为请求数据都是可以正常返回

chrome浏览器 Provisional headers are shown
前后端数据交互 vue的data问题

1、http请求无法修改data中的数据,因为请求成功后回调函数处于其他函数的内部this不会和任何对象绑定,为undefined
	1.1、在外部定义一个_this指向this然后用_this调用http
	1.2、使用箭头函数
		testHttp: function () {
		        http.get('/demo/demo/productInfo_select.gou').then((res) => {
		          this.data1 = res.data
		        })
		      },
2、mouseeneter无效
	内部框架禁止部分功能 可以在mouseenter后面加.native

表格单选实现(需要其他设置)原文在下面

 render: (h, params) => {
              let id = params.row.activeCode
              let name = params.row.activeName
              let codeType = params.row.type
              let price = params.row.price / 100
              let defaultS = false
              if (this.currentid === id) {
                defaultS = true
              } else {
                defaultS = false
              }
              let self = this
              return h('div', [
                h('radio', {
                  props: {
                    value: defaultS
                  },
                  on: {
                    input: function () {
                      self.currentid = id
                      self.formValidate.thirdActiveName = name
                      self.formValidate.thirdActiveCode = id
                      self.formValidate.codeType = codeType
                      self.formValidate.codePrice = price
                    }
                  }
                })
              ])
            }

radio单选

根据部分属性取出所需的对象

//返回数组
  let data = this.productInfo.filter(function (item) {
          return item.name === val
        })
 //返回一个
  let data = this.allProductInfo.find(function (item) {
          return item.name === val
        })

引用方式使用iView组件

在使用 CDN 引用时,即非 template/render 模式下,组件名要采用文件名小写,单词间用-分隔,例如RadioGroup 必须要写成 radio-group。

引入iview和自创组件
去掉打印的页眉

父子组件通信

1、最好使用较为小的元素,如果传入的数组 可能在子组件中需要对其操作 不太方便
	使用关键元素更方便
2、父组件通过@事件名 = "方法名" 来完成接受从子组件传的值

v-model

相当于给子组件传递了一个value prop
同时会接受input事件将值修改成从子组件传递上来的值

生命周期

beforeCreate 生命周期函数在组件实例刚被创建的时候增加一些loading事件
created 生命周期函数可以结束loading事件,完成一些初始化,实现函数自执行等
mounted 是比较重要的生命周期函数,可以发起后端请求,取回数据,接受页面之间传递的参数、由子组件向父组件传递参数等

Axios

是一个基于Promise、用于浏览器和node.js的HTTP客户端,常用于处理AJAX请求,具有如下特征
	1、从浏览器中创建XMLHttpRequest
	2、从node.js发出http请求
	3、支持Promise API
	4、拦截请求和响应
	5、转换请求和响应数据
	6、取消请求
	7、自动转换JSON数据
	8、客户端可以防止CSRF/XSRF(两种伪造站点请求的方式。伪造的恶意请求对服务器来说完全合法,都完成了攻击者期望的操作)恶意请求发生

你可能感兴趣的:(vue)