vue初学习笔记--01

(该文章整理于网络,仅用于学习记录,如有侵权,请联系删除)

一. 脚手架搭建(vue-cli 3 ):

    # install vue-cli
    $ npm install -g vue-cli //全局安装,将vue变成一个命令行中的命令
    # create a new project using the "webpack" boilerplate
    $ vue init webpack my-project
    # install dependencies and go!
    $ cd my-project
    $ cnpm install  //每次你去下载一整个的应用都要去下载相对应的依赖,每个应用应该有几十个依赖,这些依赖的信息在package.json中都有说明,直接npm install 就能直接将所有需要的依赖安装,我已经把npm 设置成了淘宝的镜像
    $ npm run dev//  这样就运行起来了,其实这里的dev这些设置也是 已经提前在package.json里面设置好了,要注意在你的项目路径下面运行,不然会找不到package.json文件的。

二. 解析vue-cli中的页面结构(工程目录)

  |-- build                            // 项目构建(webpack)相关代码
  |   |-- build.js                     // 生产环境构建代码
  |   |-- check-version.js             // 检查node、npm等版本
  |   |-- utils.js                     // 构建工具相关
  |   |-- vue-loader.conf.js           // webpack loader配置
  |   |-- webpack.base.conf.js         // webpack基础配置
  |   |-- webpack.dev.conf.js          // webpack开发环境配置,构建开发本地服务器
  |   |-- webpack.prod.conf.js         // webpack生产环境配置
  |-- config                           // 项目开发环境配置
  |   |-- dev.env.js                   // 开发环境变量
  |   |-- index.js                     // 项目一些配置变量
  |   |-- prod.env.js                  // 生产环境变量
  |   |-- test.env.js                  // 测试脚本的配置
  |-- src                              // 源码目录
  |   |-- components                   // vue所有组件
  |   |-- router                       // vue的路由管理
  |   |-- App.vue                      // 页面入口文件
  |   |-- main.js                      // 程序入口文件,加载各种公共组件
  |-- static                           // 静态文件,比如一些图片,json数据等
  |-- test                             // 测试文件
  |   |-- e2e                          // e2e 测试
  |   |-- unit                         // 单元测试
  |-- .babelrc                         // ES6语法编译配置
  |-- .editorconfig                    // 定义代码格式
  |-- .eslintignore                    // eslint检测代码忽略的文件(夹)
  |-- .eslintrc.js                     // 定义eslint的plugins,extends,rules
  |-- .gitignore                       // git上传需要忽略的文件格式
  |-- .postcsssrc                      // postcss配置文件
  |-- README.md                        // 项目说明,markdown文档
  |-- index.html                       // 访问的页面
  |-- package.json                     // 项目基本信息,包依赖信息等
  1. main.js 程序入口文件,加载各种公共组件
     

     第一部分(import)导入要用到的组件
    第二部分新建了一个Vue对象,组件里面写的是App,也就是说导入 App.vue,在入口的时候将app的东西都显示出来。

  2. 看看App.vue里面写的是什么东西
     

    这里引入了一个组件 componentsA,直接以标签的形式加在html里面。
    要在下面的export default里面的components进行注册,不然是用不了的。
    对于组件的理解:组件是可以复用的Vue实例,带有名字,也可以说是一个自定义元素。是页面的一部分,就是可能其他地方也要用到,所以就封装起来,所以要用的时候进行导入。

  3. 关于路由
     

    设置了Helloworld这个组件的path为/
    要注意,这个路由的出口就是在html中的<router-view></router-view>
     

     helloworld这个组件最后显示的应该就是‘welcome to your Vue,js App'
    我们在App.vue里面的html的最下面定义了路由出口
    router对于构建大型单页应用还是有很大优势的,嵌套路由,视图切换动画,具名路径

三、其他

每个Vue应用都是用Vue函数创建一个新的实例开始的。Vue就是一个构造函数,所以我们这个实例化的对象vm也继承了Vue的特点。

new Vue({
    el: '#app',
    data: {
        message:'hello Vue.js'
    }
})

el指定挂载的位置,挂载到id为app的元素上

  • 响应式系统中加入了所有data对象中所含有的属性,也就是当这些属性的值发生改变时,视图中这些属性的值也会相应的改变。这也是一个很重要的特点

简单的例子:

<p div = "app">库存:{{a}}</p>//html
    var vm = new Vue({
    el:"#app",
    data:{
        a:100
    } 
     method:{
        function(){   }  
     }
  }) //script

data代表vue对象的数据,data这里声明,数据要在method代表vue对象的方法,所以function要在methods这里声明。可以看到<p></p>之间的{{a}}就是用了我们下面定义的id为“app"的vm这个对象里面的data对象的a属性的值。在控制台输入 vm.a = 190 回车之后我们看到。这里的库存也改变了,这也是Vue的一个特点:响应式(relative)可以想象接入后端数据库之后处理也是特别方便的。除了数据属性,还有一些实例属性和方法,他们都有前缀$,以便与用户定义的属性区分开来。

问题:为什么组件中的data一定要用reurn 返回?

  • 要做成组件,因为可以多次使用,比较方便。
  • 如果多个地方同时用到一个组件,一旦其中一个地方的data改变,用return返回的话就不会影响到其他组件中data的值,因为不是引用值(引用值就是不用return 直接 f:1,d:2这样,而且数据只有一份,一旦更改,其他地方的这个组件也会更改)

数组方法中的concat(),slice(),filter(),直接复制,或者改变数组长度的这些方法不会触发视图的更新,因为不会改变现有数组。

四、一些 Vue独有的函数及其用法

1. v-if

    <div id="app_2">
        <p v-if="seen">你现在可以看到我</p>
    </div>  //html

    var app2 = new Vue({
        el:"#app_2",
        data:{
            seen:true
        }
    })  //script

1.1 v-if是类似于一个if的函数,进行判断并操作,也就是说如果seen这个属性是true的话,就会显示文字,如果这个属性是false的话,就不会显示文字,所以如果你在控制台输入app2.seen=false的话,"你现在可以看到我"这行文字是不会出现的。

    <div id = "app">
    <template v-if="ok">
    <p>Paragraph 1</p>
    <p>Paragraph 2</p>        
    </template>
    </div>   //html
        var vm = new Vue({
        el:"#app",
        data:{
            ok:true
        }
    })

1.2 因为v-if是一个指令,所以必须绑定在一个上,如果要切换多个元素,此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v-if。最终的渲染结果将不包含 <template> 元素。也就是用一个<template>把那些元素包含起来。

 <div v-if="Math.random() > 0.5">
    Now you see me
    </div>
    <div v-else>
    Now you don't
    </div>

1.3  if else的用法

1.4 和 v-show的区别

 v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

2. v-for

2.1 对一个列表进行渲染
v-for 指令需要使用 "item in items "形式的特殊语法,
items 是源数据数组并且 item 是数组元素迭代的别名。
也就是说我们原来实例化的对象的data对象中的数组的名字是复数的(例如是products)然后在html中用<li v-for = "product in products"></li>来实现我们的遍历。
当然你用item in products也是没问题的,用取到的item.text...进行操作,数组有index代表索引,对象有key代表索引(key,value) index从0开始

<div id="app_3">
   <ol>
       <li v-for = "(todo,index) in todos">
          {{ todo.text }} {{index}}
       </li>
   </ol>
</div>  //有索引值的情况

<div id="app_3">
   <ol>
       <li v-for = "todo in todos">
          {{ todo.text }}
       </li>
   </ol>    
</div>//html
    
    var app3 = new Vue({
        el: '#app_3',
        data: {
        todos: [
          { text: '学习 JavaScript' },
          { text: '学习 Vue' },
          { text: '整个牛项目' }
]
  }
  })

3. v-on

可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。 v-on可以用来接收一个方法,我们应该在实例化对象的method中定义方法。

  <div id="app_4">
       <button v-on:click = "count = count+1">add</button>
      <p>您已经点击{{count}}次</p>
  </div> //html
     var app4 = new Vue({
        el:"#app_4",
        data:{
            count:0
        }
    })//script

4.v-model

在表单 <input> 及 <textarea> 元素上创建双向数据绑定。可以监听用户的数据并且更新。

<div id="app_5">
    <input v-model="message"placeholder="edit">
    <p>您输入的信息是:{{message}}</p>
    <!-- 文本框的双向数据绑定 -->
</div>//html
    var app5 = new Vue({
        el:"#app_5",
        data:{
            message:''
        }
     })//script

5. v-bind

绑定class,href...

同一个标签不管用v-bind还是直接<a class="xxx">所绑定的类是不会冲突的。

 <div id="app_7">
    <a v-bind:href="link" v-bind:class="classA">to success</a>
    </div>

    var app7 = new Vue({
        el:"#app_7",
        data:{
            link:"https://www.baidu.com",
            classA:'red-fonts'
        }
    })

classA也是我们在data中的参数,可以在classA中指定。

总结:

  • v-on,@,methods事件绑定
  • v-on修饰符可以指定键盘事件
  • v-model表单数据模型双向绑定

五、父子通信

1、子组件向父组件通信
 

  • 新建的组件最好就放在我们的components目录下面
  • 组件名字如果是驼峰形式,例如helloWorld,作为标签直接导入时就应该是hello-world(这是vue的特点,vue自动为你转化了)
  • 要在父组件里面的components里面进行注册才能用

  •  这个就是因为没有注册我们的组件的提醒。请注意:我们的组件都是在components下面注册的,components是和data,methods同一级的。

  • 子组件通过$emit向父组件发送信息,触发事件,具体步骤如下:

  • 1. 在子组件中进行< content @click=”close”>事件的绑定

  • 2. 在子组件中的methods对这个close进行定义
  • 3. 
     methods:{
         close(){
            this.emit(‘on-close’) 
        } 
     }

    4.  在父组件中的子组件标签中绑定on-close这个事件

  • 5.<dialog :on-close=”beClose”>

  • 6.在父组件的methods定义这个事件
     methods{
       beClose(){
        console.log(10)
       }
     }

2、父组件向子组件通信

父组件向子组件传递信息时,要在子组件的props里面进行定义

 父组件中向子组件传number=5;
需要在子组件里面的props进行声明,就直接传递过去了。

                                                         父组件的template.png

                                                           子组件.png         

注意:props中多个单词之间要用连接符不要用驼峰方式,如下子组件。

                                            子组件驼峰与连接符.png

如果要实现动态绑定也十分简单,注意要绑定,用v-bind或者:

                                将表单提交的值传给子组件,将value与myVal绑定起来.png

                                        子组件只要定义一下就ok了.png

用于一些幻灯片组件的使用啊,具体的数据在父组件那里的时候。


父组件向子组件传递信息的另外一个方式是插槽<slot></slot>

                                   父组件中的需要在子组件里面加入<p>和<span>一些内容

 子组件中没有进行修改

显示出来了,并且在相对应的位置

3.总结

父组件向内传递属性-动态属性
子组件向外发布事件
slot插槽传递模板-具名slot

六、vue-router

// 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用       Vue.use(VueRouter)

// 1. 定义 (路由) 组件。
// 可以从其他文件 import 进来
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }

// 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
// 我们晚点再讨论嵌套路由。
const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

// 3. 创建 router 实例,然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
  routes // (缩写) 相当于 routes: routes
})

在html中,我们就可以用<router-link>来进行导航
<router-view/>是渲染出口

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!-- 使用 router-link 组件来导航. -->
    <!-- 通过传入 `to` 属性指定链接. -->
    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <!-- 路由出口 -->
  <!-- 路由匹配到的组件将渲染在这里 -->
  <router-view></router-view>
</div>

在实例化的时候, mode: 'history',可以后退。
前端路由参数
在映射表中进行设置

                                                        router的index.js文件夹

color会被做为参数注入到$route.params里面
 

                                         apple.vue中获取路由当前页面的参数.png

                                                          键入参数.png

                                                     apple.vue中定义的方法取相关参数.png

                                                

                                        打印台打出当前页面参数.png

七、Vuex

Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

再次强调,我们通过提交 mutation 的方式,而非直接改变 store.state.count,是因为我们想要更明确地追踪到状态的变化。这个简单的约定能够让你的意图更加明显,这样你在阅读代码的时候能更容易地解读应用内部的状态改变。此外,这样也让我们有机会去实现一些能记录每次状态改变,保存状态快照的调试工具。有了它,我们甚至可以实现如时间穿梭般的调试体验。

注意事项

记得注册store!!!!!不然commit,mutation这些它是识别不出来的啊!state也是重点来着
 

Vuex 通过 store 选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用 Vue.use(Vuex)):
同步逻辑放在mutation中
异步逻辑放在action中
然后就可以去调用store里面的属性。

八、其他重要知识点

1. 优雅的使用v-for 、computed

                                              this在这里是很重要的!!!!.png

注意绑定啊啊啊啊

没有:就直接将isShowDialog作为值传递进去,这是不行的

双向数据绑定

实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定

另一种方式实现 Vue 的响应式原理

众所周知,vue是通过Object.defineProperty 追踪依赖,从而实现响应式的。
有两个不足之处:

  • 不能检测到增加或删除的属性。
  • 数组方面的变动,如根据索引改变元素,以及直接改变数组长度时的变化,不能被检测到。

原因差不多,无非就是没有被 getter/setter 。
第一个比较容易理解,为什么数组长度不能被 getter/setter ?
在知乎上找了一个答案:如果你知道数组的长度,理论上是可以预先给所有的索引设置 getter/setter 的。但是一来很多场景下你不知道数组的长度,二来,如果是很大的数组,预先加 getter/setter 性能负担较大。
现在有一个替代的方案 Proxy,但这东西兼容性不好,迟早要上的。
Proxy,在目标对象之前架设一层拦截。具体,可以参考 http://es6.ruanyifeng.com/#docs/reference
Vue3.0就用的proxy
vue打包有时候会找不到图片,主要是打包路径的问题
https://www.cnblogs.com/diantao/p/7776523.html

更新一下对于computed的认识

其实主要还是为了简便计算
例如我们有一个这样的需求: 将输入两个文本框的姓氏和名字一起显示出来。

<input type="text"
       v-model="firstName" />
<input type="text"
       v-model="lastName" />
<p>{{name}}</p>

  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      firstName: '',
      lastName: ''
    }
  },
  computed: {
    name () {
      return this.firstName + this.lastName
    }
  }

只要我们在computed里面定义的这个name函数已经将firstName和lastName一起拼合起来就好了,然后就可以在标签里面直接用name了。

Vue生命周期
我们先来说说几个最经常用到的。

  • created
    实例(APP)已经创建,变量还未渲染到模板
    此时修改变量还是能起作用的
  • mounted
    变量已经挂载到模板上面了,此时修改变量也还是能起作用的
  • updated
    实例更新
  • destoryed
    实例销毁

面试题:为什么要使用VUEJS

实现项目的模块化,组件化。
实现数据渲染。
提供路由,ajax,数据流等其他功能。

相关推荐

Lambda表达式

codest的专栏 224

inux下C编程(10)---字符及字符串处理

字符编码ASCII: 7位 128个元素。大小写相差20hunicode: 2个 4个或更多的存储空间。utf-8: 每个字符2个字节字符处理库通过转换函数,可以实现和其他类型的转换。字符串转换函数字符串处理函数字符串比较函数字符串查找函数字符串内存函数字符串其他函数...

codest的专栏 233

linux下C编程(09)---函数

函数的一般形式:类型说明可以是任何数据类型,包括vOid.返回语句。return两个作用:结束当前函数,调用者获取程序的控制权。将计算结果传递给调用者。程序结束两种情况:代码结束return作用域规则范围划分局部变量作用函数体内。全局变量。作用域是整个源程序文件,文件中的所有函数和程序块都可以引用。生命周期划分动态存储变量。默认或者AUTO。静态存储变量sttic修饰符函数退出后,变量被保留在内存,再次执行同一函数会得到与上次退出时候相同的数值。函数的.

codest的专栏 231

linux下C编程(08)---数组和指针

一维数组一般形式数据类型 + 名称 +【长度】初始化 3种形式根据下标声明时候加入等号声明时候不指定长度,根据初始化的个数来确定。字符串使用的一维数组字符串数据和一般的字符数据区别是,前者还包含了字符串结束符:“\0”.C没有专门的字符串类型,但是允许使用字符串常量和字符串数组,并提供字符串操作函数。二维数组格式声明:数据类型 + 名称 +【长度1】【长度2】数组长度是 长度1* 长度2二维字符串数组可以看做多个一维字符串数组,第一组是字符串的个数多维数组

codest的专栏 287

linux下C编程(07)---程序控制结构

数据的输入和输出scanf 输入没有专门的语句,通过标准的库函数的调用实现,stdio.hscanf: 键盘上获取,按照指定的输入格式赋给相应的输入项目输入格式格式字符说明d输入一个十进制o输入一个八进制x输入一个16进制f输入一个小数点形式的浮点数e输入一个指数形式的浮点数c输入一个字符s输入一个字符串屏蔽某个数据时候,可以使用修饰符*空格或道和可以表示多个数之间的间隔。printf()输出修饰符是可

codest的专栏 211

linux下C编程(06)---C语言的数据类型

六、C语言的数据类型基本数据类型基本类型字长char 字符型1个字节int 整型2字节 AMD64 下 是4字节float整型4字节double整型8字节void 整型0字节聚合类型数组指针结构体共同体修饰符signedunsignedlongshort修改字符和整数两种基本类型。long还可以用于double.有符号将1位用于存储符号。常量#define定义的常量字符、字符串、数值常量。常量变量枚

codest的专栏 227

2021-09-12

什么是插槽? 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制 slot官方介绍 Props: name - string,用于命名插槽。 U...

codest的专栏 216

Vue 快速上手

1、前端核心分析2、前端发展史3、第一个Vue程序4、Vue基本语法5、Vue绑定事件6、Vue双向绑定7、Vue组件讲解8、Axios异步通信9、计算属性10、插槽slot11、自定义事件内容分发12、第一个vue-cli程序13、webpack学习使用14、vue-router路由15、vue+elementUl16、路由嵌套17、参数传递及重定向18、404和路由钩子...

codest的专栏 256

若依Vue(若依前后端分离版)--01

介绍RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Security、MyBatis、Jwt、Vue),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源,支持分布式事务。快速了解环境部署部署Java部署Vue项目介绍bbbub{},“aaa”====》debug讲解模拟登陆若依 获取验证码,得到UUID ..

codest的专栏 3996

int与Integer区别及应用场景

一、int与Integer区别:1、int属于基本数据类型,Integer属于int对应的包装类。2、既然是类,就需要实例化才可以使用,而基本数据变量不需要。3、Integer的默认值是null,而int的默认值是0二、int与Integer的应用场景1、为什么java会保留基本数据类型?对于java来说,常说“一切皆对象”,那为啥java还有基本数据类型,对此需要明白,基本数据类型和对象类型的区别1、基本数据类型基本数据类型存在的是:值,基本数据类型在内存中存放的位置是栈。(声明在方法中的

codest的专栏 1548

Java中的List、Set和Map的各自特征及使用场景

Java中的集合分为单列集合Collection和双列集合Map。 先通过这张图看看Collection和Map的各自体系。 首先看单列集合Collection中的List及Set的各自特征。 List(有序,可重复)             ArrayList   &nb...

codest的专栏 551

IDEA 中 Project 和 Module 详解与实战

IDEA 相关文章 标题文章连接大厂通用最全IDEA使用手册https://blog.youkuaiyun.com/chenlixiao007/article/details/106952976阿里巴巴Java开发编码规约与IDEA集成https://blog.youkuaiyun.com/chenlix...

codest的专栏 4777

阿里巴巴Java开发编码规约与IDEA集成

文章目录 IDEA 相关文章Ⅰ 阿里巴巴代码规约插件安装Ⅱ 插件使用Ⅲ 开发规范手册下载 IDEA 相关文章 标题文章连接大厂通用最全IDEA使用手册https://blog.youkuaiyun.com/chenlixiao007/article/details/1069529...

codest的专栏 254

大厂通用最全IDEA使用手册

IDEA 相关文章 标题文章连接阿里巴巴Java开发编码规约与IDEA集成https://blog.youkuaiyun.com/chenlixiao007/article/details/108287646IDEA 创建不同类型 Project 和 Module 详解https://blog.youkuaiyun.com/chenlixiao007/ar...

codest的专栏 543

idea工程和模块的区别

1、工程是独立的,具有自己的内部资源(jar包等)。 模块不是独立的,属于某一个工程,并可以使用该工程的所有资源。2、同一个工程中的模块对于该工程是继承关系,子模块之间初始状态下没有关系。 父工程和子模块之间不用单独手动建立关系,子模块之间需要手动建立关系,各模块之间的关系称为依赖。...

codest的专栏 901

五、SpringBoot(5)-SpringBoot与整合其他技术

SpringBoot整合Mybatis1.1 添加Mybatis的起步依赖<!--mybatis起步依赖--><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version>&

codest的专栏 220

四、SpringBoot(4)-SpringBoot的配置文件

SpringBoot配置文件类型1 SpringBoot配置文件类型和作用SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件其中,applic

codest的专栏 229

三、SpringBoot(3)-原理分析

起步依赖原理分析1. 分析spring-boot-starter-parent按住Ctrl点击pom.xml中的spring-boot-starter-parent,跳转到了spring-boot-starter-parent的pom.xml,xml配置如下(只摘抄了部分重点配置):<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-de

codest的专栏 219

二、SpringBoot(2)--快速入门

代码实现 创建Maven工程 使用idea工具创建一个maven工程,该工程为普通的java工程即可。 添加SpringBoot的起步依赖 编写SpringBoot引导类 编写Controller 测试 快速入门解析 SpringBoot代码解析 SpringBoot工程热部署 使用idea快速创建SpringBoot项目 ...

codest的专栏 222

一、SpringBoot(1)-简介

1.原有Spring优缺点分析1.1 Spring的优点分析Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。1.2 Spring的缺点分析虽然Spring的组件代码是轻量级的...

codest的专栏 232

Vue的组件为什么要export default

Vue 的模块机制  Vue 是通过 webpack 实现的模块化,因此可以使用 import 来引入模块,例如:  此外,你还可以在 bulid/webpack.base.conf.js 文件中修改相关配置:

codest的专栏 478

viewport、布局视口、视觉视口、理想视口 深入理解

在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的meta标签的使用,才能更好地让我们的网页适配或响应各种不同分辨率的移动设备。通俗的讲,移动设备上的viewport就是设备的屏幕上能用来显示我们的网页的那一块区域,在具体一点,就是浏览器上(也可能是一个app中的webview)用来显示网页的那部分区域,但viewport又不局限于浏览器可视区域的大小,它可能比浏览器的可视区域要大,也可能比浏览器的可视

codest的专栏 769

tp( thinkphp)数据更新和查询

一、数据更新1、使用find方法获取数据,然后通过save方法保存修改,返回布尔值$user = UserModel::find(11); $user->username = '李黑'; $user->save()2、通过where方法解和find方法的查询条件获取的数据进行修改$user=Students::where('id',1)->find();$user->uname ='admin';$user->email ='66461682@qq.

codest的专栏 1092

javascript基础(12)--定时器

333

codest的专栏 116

javascript基础(11)--BOM介绍

BOM:浏览器对象模型,BOM可以使我们通过JS来操作浏览器,在BOM中为我们提供了一组对象,用来完成对浏览器的操作.BOM对象:Window代表的是整个浏览器的窗口,同时window也是网页中的全局对象Navigator代表的当前浏览器的信息,通过该对象可以来识别不同的浏览器代表的当前浏览器的信息,通过该对象可以来识别不同的浏览器由于历史原因,Navigator对象中的大部分属性都已经不能帮助我们识别浏览器了一般我们只会使用userAgent来判断浏览器的信息,u.

codest的专栏 116

javascript基础(11)--事件对象

事件对象当事件的响应函数被触发时,浏览器每次都会将一个事件对象作为实参传递进响应函数,在事件对象中封装了当前事件相关的一切信息,比如:鼠标的坐标键盘哪个按键被按下鼠标滚轮滚动的方向。window.onload = function(){ /* * 当鼠标在areaDiv中移动时,在showMsg中来显示鼠标的坐标 */ //获取两个div var areaDiv = document.getElementById("areaDiv"); var showMsg ...

codest的专栏 221

javascript基础(10)--DOM和事件

DOM:文档对象模型文档:文档表示的就是整个的HTML网页文档 对象:对象表示将网页中的每一个部分都转换为了一个对象,将页面每个元素转换为对象 模型:倒树,体现节点对象之间的关系。 通过js操作html中的元素,如:h1, head等。节点:节点:Node——构成HTML文档最基本的单元 ,常用节点分为四类。文档节点:整个HTML文档 元素节点:HTML文档中的HTML标签 属性节点:元素的属性 文本节点:HTML标签中的文本内容浏览器已经为我们提供文档节点对象..

codest的专栏 302

javascript基础(11)--json

JSON: JavaScriptObjectNotationJS对象表示法JS中的对象只有JS自己认识,其他的语言都不认识,JSON就是一个特殊格式的字符串,这个字符串可以被任意的语言所识别,并且可以转换为任意语言中的对象,JSON在开发中主要用来数据的交互.Json基本语法:JSON和JS对象的格式一样,只不过JSON字符串中的属性名必须加双引号,其他的和JS语法一致。对象中的属性名,(注意:单引号、双引号、不加都是可以的)JSON分类:1.对象{} --jso...

codest的专栏 217

javascript基础(9)--正则表达式

正则表达式用于定义一些字符串的规则,计算机可以根据正则表达式,来检查一个字符串是否符合规则,获取将字符串中符合规则的内容提取出来.使用步骤:创建正则表达式的对象 varreg=newRegExp("a"); //对象方式使用字面量:语法:var变量=/正则表达式/匹配模式 这个正则表达式可以来检查一个字符串中是否含有a,在构造函数中可以传递一个匹配模式作为第二个参数,i忽略大小写,g全局匹配模式. 使用TEST() 方法. 使用这个方法可以用来检查一个字符串是...

codest的专栏 150

javascript基础(8)--date /math/包装类/String

1 Date对象在JS中使用Date对象来表示一个时间vard=newDate();vard2=newDate("2/18/201111:10:30");getDate()获取当前日期对象是几日getDay()获取当前日期对象时周几getMonth获取当前时间对象的月份getFullYear * getTime() * - 获取当前日期对象的时间戳 * - 时间戳,指的是从格林威治标准时间的1970年1月1日,0时0...

codest的专栏 101
上一篇: viewport、布局视口、视觉视口、理想视口 深入理解
下一篇: Vue的组件为什么要export default
codest
codest 企业官方账号 企业官方账号
博客等级 码龄17年 7粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值