当前位置:   article > 正文

Vue项目开发中遇到的一些点,记录一下_iview transition

iview transition

目录

1. @U/ 代指什么

2、组件传值provider/inject

3.display: -webkit-box;

4.内边距

5.overflow

可能的值

6.transition过渡

语法

7.json.stringify()

8.input autocomplete

9.loading加载中

10.路由中的meta

11.vue监听数据

12.65535

13.父组件调用子组件方法

14.子组件监听父组件的变量

15.flex布局

16.具名插槽 slot-scope

17.this.$options.data()

18.vue事件的派发与接收(触发和监听)

19. 子组件不要直接更改父组件传过来的值

20. new Date()添加 prototype 方法

21.mvc 和 mvvm

22.DIV+ CSS 布局

23. vue 子路由

24. iview

​25. 箭头函数 和 that


1. @U/ 代指什么

默认到那个文件下面找 @U代指 src 下的 util文件夹,@U/ajax代指src下的util下的ajax.js文件

2、组件传值provider/inject

provider/inject:简单来说就是在父组件 provide 中提供变量,子组件 inject 中来注入,然后可以在子组件内部使用 provide 的变量.

需要注意的是这里不论子组件有多深,只要调用了inject那么就可以注入provider中的数据。而不是局限于只能从当前父组件的prop属性来获取数据。

App.vue

  1. <template>
  2.  <div id="app">
  3.    <div>
  4.      <second/>
  5.    </div>
  6.  </div>
  7. </template>
  8. <script>
  9. import second from './components/Second'
  10.  export default {
  11.    name: 'app',
  12.    components: {
  13.      second
  14.   },
  15.    provide: {
  16.      test: 'App 根组件的 provide'
  17.   },
  18.    data() {
  19.      return {
  20.     }
  21.   },
  22.    methods: {
  23.   }
  24. }
  25. </script>
  26. <style>
  27. </style>

Second.vue

  1. <template>
  2.    <div>
  3.      <p>second: {{ test }}</p>
  4.      <third/>
  5.    </div>
  6. </template>
  7. <script>
  8. import third from './Third.vue';
  9.  export default {
  10.    name: 'second',
  11.    components: {
  12.        third
  13.   },
  14.    inject: ['test'],
  15.    data() {
  16.      return {
  17.        
  18.     }
  19.   },
  20.    methods: {
  21.    
  22.   }
  23. }
  24. </script>
  25. <style>
  26. </style>

Third.vue

  1. <template>
  2.    <div>
  3.      <p>third: {{ test }}</p>
  4.    </div>
  5. </template>
  6. <script>
  7.  export default {
  8.    name: 'third',
  9.    components: {},
  10.    inject: ['test'],
  11.    data() {
  12.      return {
  13.        
  14.     }
  15.   },
  16.    methods: {
  17.    
  18.   }
  19. }
  20. </script>
  21. <style>
  22. </style>

3.display: -webkit-box;

流式布局:通常用%来设置,如下例子,流式布局

  1. <!DOCTYPE html>
  2. <html>
  3.    <head>
  4.        <title>Liquid Layout</title>
  5.        <style type="text/css">
  6.           * {
  7.                color: #fff;
  8.                text-align: center;
  9. }
  10.            body {
  11.                width: 90%;
  12.                margin: 0 auto;
  13. }
  14.           #content {
  15.                overflow: auto;
  16. }
  17.            #nav, #feature, #footer {
  18.                margin: 1%;
  19. }
  20.            .column1, .column2, .column3 {
  21.                width: 31.3%;
  22.                float: left;
  23.                margin: 1%;
  24. /* border: 0.0625rem solid; */
  25. }
  26.            .column3 {
  27.                margin-right: 0%;
  28. }
  29.            li {
  30.                display: inline;
  31.                padding: 0.5em;
  32. }
  33.            #nav, #footer {
  34.                
  35.                padding: 0.5em 0;
  36. }
  37.            #feature, .article {
  38.                color:#fff;
  39.                height: 10em;
  40.                margin-bottom: 1em;
  41.               }
  42.        </style>
  43.    </head>
  44.    <body>
  45.        <h1 style="color:#706fd3">软件开发</h1>
  46.        <div id="header" style="background-color: #5555ff;">
  47.            <h1>Logo</h1>
  48.            <div id="nav">
  49.                <ul>
  50.                    <li><a href="">首页</a></li>
  51.                    <li><a href="">产品</a></li>
  52.                    <li><a href="">服务</a></li>
  53.                    <li><a href="">关于我们</a></li>
  54.                    <li><a href="">联系我们</a></li>
  55.                </ul>
  56.            </div>
  57.        </div>
  58.        <div id="content" style="background-color: #366092;">
  59.            <div id="feature">
  60.                <p>功能</p>
  61.            </div>
  62.            <div class="article column1">
  63.                <p>第一列</p>
  64.            </div>
  65.            <div class="article column2">
  66.                <p>第二列</p>
  67.            </div>
  68.            <div class="article column3">
  69.                <p>第三列</p>
  70.            </div>
  71.        </div>
  72.        <div id="footer" style="background-color: #333333;s">
  73.            <p>&copy; Copyright 2019</p>
  74.        </div>
  75.    </body>
  76. </html>

流体布局设计随着用户对浏览器窗口的扩大或缩小而伸展或收缩。这种设计通常使用百分数。

优势

  • 页面会伸展到整个浏览器窗口,所以即使在大屏幕上,页面的周围 也没有空白;

  • 如果用户的窗口很小,页面就会收缩以适应窗口,而不必横向滚动;

  • 即使用户设置的字体比设计人预设的更大,这种设计也可以适应(因为页面可以伸展)。

劣势

  • 如果不对页面各个部分的宽度加以控制,那么页面设计会和预期的效果大相径庭,例如某些项目或元素挤压到一起,其周围出现意想不到的空隙;

  • 如果用户的窗口非常宽,文本行就会很长,以至于难以阅读;

  • 如果用户的窗口非常窄,单词可能会被挤压,导致每行只有几个单词;

  • 如果一个固定宽度的元素位于一个不能容纳它的盒子里,那么这个元素就会溢出盒子。

由于流体布局可以伸展到浏览器窗口的整个宽度,产生难以阅读的长文本行,所以有些流媒体布局只让页面的一部分伸展和收缩。

在页面的其它部分则限制最大和最小宽度。

不同的浏览器有不同的前缀,这里使用-webkit示例

Mozilla-----------------display:-moz-box

Webkit------------------display:-webkit-box

As specified-----------display:box

提供的关于盒模型的几个属性

box-orient子元素排列 vertical(竖排)orhorizontal(横排)
box-flex兄弟元素之间比例,仅作一个系数
box-alignbox排列
box-directionBox方向
box-flex-group以组为单位的流体系数
box-lines
box-ordinal-group以组为单位的子元素排列方向

首先,需要了解的是具备的属性

-webkit- box-flex在子元素上设置,属于子元素之间的比例,值为数值即可默认值:1(数值,按比例分配)
-webkit-box-orient在父元素设置,子元素的排列方式vertical(垂直)/horizontal(水平)/inline-axis(默认值,横向排列,映射为 horizontal)/block-axis(沿着块轴来排列子元素,映射为 vertical)/inherit(从父元素继承 box-orient 属性的值)
-webkit-box-align在父元素设置,子元素垂直方向的对齐方式start(对于正常方向的框,每个子元素的上边缘沿着框的顶边放置。对于反方向的框,每个子元素的下边缘沿着框的底边放置。)/end(对于正常方向的框,每个子元素的下边缘沿着框的底边放置。对于反方向的框,每个子元素的上边缘沿着框的顶边放置。)/center(均等地分割多余的空间,一半位于子元素之上,另一半位于子元素之下)/baseline(如果 box-orient 是inline-axis或horizontal,所有子元素均与其基线对齐)/stretch(默认值,拉伸子元素以填充包含块)
-webkit-box-direction在父元素上设置,排列顺序normal(默认,以默认方向显示子元素)/reverse(以反方向显示子元素。)/inherit(从子元素继承 box-direction 属性的值)
-webkit-box-flex-group在子元素上设置,以组为单位的流体系数默认值:1
-webkit-box-ordinal-group在子元素上设置,以组为单位的排列方向默认值:1
-webkit-box-pack在父元素上设置,子元素水平方向的对齐方式center(均等地分割多余空间,其中一半空间被置于首个子元素前,另一半被置于最后一个子元素后)/justify(在每个子元素之间分割多余的空间(首个子元素前和最后一个子元素后没有多余的空间))/start[对于正常方向的框,首个子元素的左边缘被放在左侧(最后的子元素后是所有剩余的空间)对于相反方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)]/end[对于正常方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)。对于相反方向的框,首个子元素的左边缘被放在左侧(最后子元素后是所有剩余的空间)。]
-webkit-box-lines子元素是否换行,类似word-wrap和word-breaksingle(将被放置在单个行或列的所有子元素(元素不适合只会被认为是溢出))/multiple(box允许扩大到多行,以适应其所有子项)

4.内边距

5.overflow

overflow 属性规定当内容溢出元素框时发生的事情。

这个属性定义溢出元素内容区的内容会

如何处理。如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机制。因此,有可能即使元素框中可以放下所有内容也会出现滚动条。

所有主流浏览器都支持 overflow 属性。

可能的值

描述
visible默认值。内容不会被修剪,会呈现在元素框之外。
hidden内容会被修剪,并且其余内容是不可见的。
scroll内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
inherit规定应该从父元素继承 overflow 属性的值。

6.transition过渡

注释:请始终设置 transition-duration 属性,否则时长为 0,就不会产生过渡效果。

默认值:all 0 ease 0
继承性:no
版本:CSS3
JavaScript 语法:object.style.transition="width 2s"

语法

transition: property duration timing-function delay;
描述
transition-property规定设置过渡效果的 CSS 属性的名称。
transition-duration规定完成过渡效果需要多少秒或毫秒。
transition-timing-function规定速度效果的速度曲线。
transition-delay定义过渡效果何时开始
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. div
  6. {
  7. width:100px;
  8. height:100px;
  9. background:blue;
  10. transition:width 2s;
  11. -moz-transition:width 2s; /* Firefox 4 */
  12. -webkit-transition:width 2s; /* Safari and Chrome */
  13. -o-transition:width 2s; /* Opera */
  14. }
  15. div:hover
  16. {
  17. width:300px;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <div></div>
  23. <p>请把鼠标指针移动到蓝色的 div 元素上,就可以看到过渡效果。</p>
  24. <p><b>注释:</b>本例在 Internet Explorer 中无效。</p>
  25. </body>
  26. </html>

7.json.stringify()

JSON 的常规用途是同 web 服务器进行数据交换。

在向 web 服务器发送数据时,数据必须是字符串。

通过 JSON.stringify() 把 JavaScript 对象转换为字符串

8.input autocomplete

当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击 input文本输入框就会出现之前输入的文本,这样有时会觉得比较方便,但有时也会暴露用户的隐藏数据,那么如何让input表单输入框不记录输入过信息的方法呢? 方法一: 在不想使用缓存的input中添加 autocomplete="off" 例如 名字:<input type="text" name="FirstName" value="" autocomplete="off" /> 姓氏:<input type="text" name="LastName" value="" autocomplete="on" /> 方法二: 如果整个表单元素都不使用autocomplete功能的话,在 input 所在的form标签中添加 autocomplete="off" 例如

  1. <form action="#" autocomplete="off">
  2. <input type="text" name="test" />
  3. </form>

9.loading加载中

10.路由中的meta

直接在路由配置的时候,给每个路由添加一个自定义的meta对象,在meta对象中可以设置一些状态,来进行一些操作。用它来做登录校验再合适不过了

11.vue监听数据

这样写就可以监听得到了

12.65535

65535是计算机16位二进制最大数

65535一般是内存地址最大值

13.父组件调用子组件方法

  1. <!-- 次要观看条件 -->
  2. <el-form-item>
  3.    <secondViewCondition @secondViewRadioChange="secondViewRadioChange" ref="secondVC" :radio="form.radio"></secondViewCondition>
  4. </el-form-item>

使用 ref 设置子组件

然后使用 this.$refs.ref属性名.子组件方法名()

  1. // getChangeCondition() 这是子组件内部的方法
  2. let rankSecondary = this.$refs.secondVC.getChangeCondition()

14.子组件监听父组件的变量

子组件:

  1. // 获取父组件传过来的值,设置类型 + 默认值
  2. props: {
  3. radio: {
  4. type: String,
  5. default: ''
  6. }
  7. },

监听:

  1. // 监听radio的值, 这里面的this指的是vue实例
  2. watch: {
  3. radio: function(newValue, oldValue) {
  4. console.log("监听"+newValue+" "+oldValue)
  5. if(newValue == this.form.radio || newValue == 'none'){
  6. this.form.radio = ''
  7. }
  8. }
  9. },

监听里面的 方法 谨慎使用 箭头函数,即:

  1. radio: (newValue,oldValue) => {
  2. console.log(this)
  3. }

1.箭头函数没有自己的this, 它的this是继承而来; 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象, 定义它的时候,可能环境是window; 箭头函数可以方便地让我们在 setTimeout ,setInterval中方便的使用this

2.箭头函数中,this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。

15.flex布局

目前所有浏览器都兼容。

注意,设为 Flex 布局以后,子元素的floatclearvertical-align属性将失效。

  1. //display 设置项目为flex布局
  2. #app {
  3. display: flex;
  4. }
  1. //flex 设置项目的排序方向 row水平正向,row-reverse水平反向,column垂直正向,column-reverse垂直反向
  2. {
  3. flex-direction: row| row-reverse|column|column-reverse;
  4. }
  1. //flex-wrap 设置项目换行 wrap换行,第一行在上方; wrap-reverse:换行,第一行在下方; nowrap默认不换行
  2. {
  3. flex-wrap: wrap|wrap-reverse|nowrap;
  4. }
  1. //justify-content 设置项目主轴(水平)上的对齐方式 flex-start水平左边对齐;flex-end水平右边对齐;center居中对齐;space-between:水平两端对齐;space-around:水平四周对齐
  2. {
  3. justify-content: flex-start|flex-end|center|space-between|space-around;
  4. }
  1. //align-items 设置项目交叉轴(垂直)上的对齐方式 flex-start垂直顶端对齐;flex-end垂直底部对齐;center垂直居中对齐;baseline项目的第一行文字基线对齐;stretch(默认)如果项目未设置高度或设为auto,将占满整个容器的高度。
  2. {
  3. align-items: flex-start|flex-end|center|baseline|stretch;
  4. }
  1. // align-content 设置多根轴线的对齐方式
  2. {
  3. align-content:flex-start|flex-end|center|space-between|space-around|stretch;
  4. }
  1. // flex-flow 是flex-direction和flex-wrap属性的简写
  2. {
  3. flex-flow: row nowrap; // 主轴左边对齐,不换行
  4. }

项目的属性

  1. // order 定义项目的排序。数值越小,排序越靠前,默认为0
  2. .item {
  3. order: 1;
  4. }
  1. // flex-grow 放大比例 , 默认为0,即如果存在剩余空间,也不放大,所有项目都设为1,则平分剩余空间。
  2. .item {
  3. flex-grow: <number>;/*default 0*/
  4. }
  1. // flex-shrink 缩小比例,默认是1,即如果空间不足,项目将等比例缩小。如果为0,则不缩小。
  2. .item {
  3. flex-shrink:<number>;
  4. }
  1. // flex-basis 分配空余空间时,项目占据的主轴空间。默认值为auto,即项目的本来大小。
  2. .item {
  3. flex-basis: <length>|auto;
  4. }
  1. // flex 是flex-grow,flex-shrink,flex-basis的简写
  2. // none(0 0 auto); 不放大,不缩小,项目占据的主轴空间就是项目大小
  3. .item {
  4. flex: none|[1 1 auto];
  5. }
  1. //align-self 可以覆盖align-items属性。默认值是0,表示继承父元素的 align-items属性,如果没有父元素,就等同于stretch
  2. .item {
  3. align-self: auto | flex-start|flex-end|center|baseline|stretch;
  4. }

一个div把它放到最中间

  1. <div class="box"></div>
  2. // 父元素 display: flex
  3. .box {
  4. justify-content: center;
  5. aglin-items: center;
  6. }

16.具名插槽 slot-scope

17.this.$options.data()

$options是vue 里面的属性

在data里面定义一个form对象,绑定页面表单。

  1. data:{
  2. form: {
  3. id: '',
  4. name: ''
  5. }
  6. }
  7. ..............................................
  8. // methods里面使用
  9. this.form = this.$options.data().form;
  10. // 这行代码的意思是: 初始化表单里面的数据,使用vue实例里面的optoins属性拿到 data 从而拿到data里面的form
  11. //相当于 this.form.id = ''; this.form.name = '';

new Vue的时候传了一个对象,把该对象记为options,Vue将options中自定义的属性和Vue构造函数中定义的属性合并为vm.$options,vm.$options.data()中的this指向vm.$options.

data()中若使用了this来访问props或methods,在重置$data时,注意this.$options.data()的this指向,最好使用this.$options.data.call(this).

18.vue事件的派发与接收(触发和监听)

  1. var eventHandle = new Vue();
  2. var vue = new Vue({
  3. el: '#app',
  4. router,
  5. vuet,
  6. template: '<Index/>',
  7. components: {
  8. Index
  9. },
  10. data: {
  11. /* 用于创建页签事件派发
  12. 派发事件:this.$root.eventHandle.$emit('事件名','传递的参数')
  13. 事件接收:
  14. created:function(){
  15. var self = this;
  16. this.$root.eventHandle.$on('事件名',function(d){
  17. })
  18. }
  19. */
  20. eventHandle: eventHandle
  21. },
  22. methods: {}
  23. });

new一个vue对象,加载到eventHandle上,注册到vue实例上去,这个vue对象会跟整个项目的vue一样有相同的生命周期,这样子就可以使用这个对象去触发vue里面的事件了。

  1. // 事件触发(事件派发)
  2. this.$root.eventHandle.$emit("VIDEO_UPLOAD_LIST_DIALOG")
  1. // 事件监听(事件接收)
  2. this.$root.eventHandle.$on('VIDEO_UPLOAD_LIST_DIALOG', () => {
  3. this.showUploadList()
  4. })

19. 子组件不要直接更改父组件传过来的值

20. new Date()添加 prototype 方法

给原生的 Date 添加一个 格式 的方法

  1. /** 时间格式
  2. *
  3. * @param {*} fmt 格式字符串 yyyy-MM-dd hh:mm:ss
  4. * @returns 时间字符串
  5. */
  6. Date.prototype.format = function (fmt = "yyyy-MM-dd hh:mm:ss") {
  7. const o = {
  8. "M+": this.getMonth() + 1, //月份
  9. "d+": this.getDate(), //日
  10. "h+": this.getHours(), //小时
  11. "m+": this.getMinutes(), //分
  12. "s+": this.getSeconds(), //秒
  13. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  14. S: this.getMilliseconds(), //毫秒
  15. };
  16. if (/(y+)/.test(fmt)) {
  17. fmt = fmt.replace(RegExp.$1, String(this.getFullYear()).substr(4 - RegExp.$1.length));
  18. }
  19. for (const k in o) {
  20. if (new RegExp(`(${k})`).test(fmt)) {
  21. fmt = fmt.replace(
  22. RegExp.$1,
  23. RegExp.$1.length === 1 ? o[k] : `00${o[k]}`.substr(String(o[k]).length)
  24. );
  25. }
  26. }
  27. return fmt;
  28. };

21.mvc 和 mvvm


v - view 视图

m - model - 模板

mvc前端是无法保存 数据的,所有的数据都要通过接口调用存到后台

mvvm 加了 viewModel,vM 有 data可以临时存放一些数据,作为前端视图的控制器;

mvvm是前后端分离的根本原因。

vue历史

1.x版本: 没有虚拟DOM,每个元素对应一个 watch,数据change更新DOM

2.x版本:有虚拟dom,

1. 数据驱动

2. 

22.DIV+ CSS 布局


DIV+CSS 是WEB设计标准,它是一种网页的布局方法

1. 内容和表现分离,css样式可以通过文件导入,代码精简了,适合 搜索引擎seo爬取

2. 提高页面浏览速度

3. 易于维护和改版

23. vue 子路由

  以“/”开头的嵌套路径会被当作根路径,所以子路由上不用加“/”;在生成路由时,主路由上的path会被自动添加到子路由之前,所以子路由上的path不用在重新声明主路由上的path了。

24. iview


25. 箭头函数 和 that

 

 箭头函数里面 不能用that了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/363674
推荐阅读
相关标签
  

闽ICP备14008679号