Vue3.0入门级教程/总结/一小时速成 【含代码、文档、资源】

Vue基础之指令与过滤器 ES6模块化 ES6模块化规范是浏览器端与服务器端通用的模块化开发规范。它的出现极大的降低了前端开发者的模块化学习成本,开发者不需再额外学习AMD、CMD或CommonJS等模块化规范。 ES6模块化规范中定义: 每个js文件都是个独立的模块 导入其它模块成员使用import 关键字 向外共享模块成员使用export关键字 p230 Promise async/await EventLoop 宏任务和微任务 API接口案例 前端工程化 实际的前端开发: 模块化(js的模块化、css的模块化、资源的模 阅读详情

Vue.js+Vue.router


前言:vue.js其实是包含了vue语法、vue-router、vue-cli这几部分的,开发真实前端项目中就是三者一起使用才能做好一个vue项目的;其中vue语法内容比较多,vue-router路由主要用于通信和导航(比如页面的切换),vue-cli用于搭建vue项目(vue-cli的内容比较简单可以参考我的另外一篇博客:

链接: 学习vue之前最好学习的技术-webpack
链接: 如何快速有效搭建vue项目

1.1模板语法

插值 : 1文本 2 html (使用v-html指令操作html内容) 3属性** v-bind** 操作html属性 4 v-on监听事件 5** v-if** 条件语句 6** v-for **循环

用户输入:**v-model **实现双向数据绑定

//1
div
<p>{{...}}</p>
/div

//2
div
<p v-html='rewhtml'>111</p>
/div

const new vue(){
  data :{
  return 
  rewhtml:'<span style="color: red">这里会显示红色!</span>'
  }
}
Vue.createApp(app).mount('#app')

//3
//<div><span v-bind='class1 '></span></div>
参数在指令后用冒号声明
<div><span v-bind:class="{'class1':use}"></span></div>
<style>
.class{
color:red,
}
</style>

//4
div
<p v-on:click="事件名称"> </p>
<p @click="事件名称"> </p>//缩写
<p @[event]click="事件名称"> </p>  //动态参数的缩写
//修饰符 修饰符是以半角句号 . 指明的特殊后缀,
//用于指出一个指令应该以特殊方式绑定。
//例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault():
<form v-on:submit.prevent="onSubmit"></form>
/div


//5
//因为 v-if 是一个指令,所以必须将它添加到一个元素上。
//如果是多个元素,可以包裹在 <template> 元素上,并在上面使用 v-if。最终的渲染结果将不包含 <template> 元素。
div
<p v-if:'seen'> 你看不到我哈哈 </p>
/div
const new vue(){
  data :{
  return 
   seen:true,
  }
}

//6
div
<p v-for :'site in sites'> {{site.text}} </p>
/div

const new vue(){
  data :{
  return 
     sites:[ 
         //goole,edge,firefox,
         { text: 'Google' },
        { text: 'Runoob' },
        { text: 'Taobao' }
     ]
  }
}

//7
//v-model 指令用来在 input、select、
//textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,
//根据表单上的值,自动更新绑定的元素的值。
//按钮的事件我们可以使用 v-on 监听事件,并对用户的输入进行响应。
div
<p > {{message}} </p>
<input v-model: 'message'></input>
/div

const new vue(){
  data :{
  return 
    message:"hhhh"
  }
}


1.2、条件语句

1 v-else 2 v-else-if 3 v-show

//1
div
<p v-if:'seen'> 你看不到我哈哈 </p>

<p v-else> 你看到我哈哈 </p>
/div
const new vue(){
  data :{
  return 
   seen:true,
  }
}

//2
div
<p v-if:'optiona'> 你看不到我哈哈 </p>
<p v-else:'optionb'> 你看到我哈哈 </p>
<p v-else-if:'optionc'> 你看到我哈哈 </p>
/div
const new vue(){
  data :{
  return 
   optiona:'hhh'
   optionb:'heihei'
   optionc:'ahhh'
  }
}
//3
//v-show根据条件显示元素
div
<p v-show:'seen'> 你看不到我哈哈 </p>

/div
const new vue(){
  data :{
  return 
   seen:true,
  }
}

1.3循环语句

1 v-for 需要以site in sites的形式 2 v-for 可以读取value 3 v-for 可以读取index 4v-for 可以读取key 5 循环整数 6 显示排序结果 7在自定义组件使用v-for

//1
div
<p v-for :'site in sites'> {{site.text}} </p>
/div

const new vue(){
  data :{
  return 
     sites:[ 
         //goole,edge,firefox,
         { text: 'Google' },
        { text: 'Runoob' },
        { text: 'Taobao' }
     ]
  }
}

//2
div
//<p v-for :'value'> {{site.text}} </p>
ul
<li v-for ='value in object'> {{value}} </li>
/ul
/div

const app = {
  data() {
    return {
      object: {
        name: 'www',
        url: 'http://www.123.com',
        slogan: 'hhhhh!'
      }
    }
  }
}

//3
div
//<p v-for :'value'> {{site.text}} </p>
ul
<li v-for ='value in object'> {{key}}:{{value}} </li>
/ul
/div

const app = {
  data() {
    return {
      object: {
        name: 'www',
        url: 'http://www.123.com',
        slogan: 'hhhhh!'
      }
    }
  }
}
//4
div
//<p v-for :'value'> {{site.text}} </p>
ul
<li v-for ='value in object'> {{index}}.{{key}}:{{value}} </li>
/ul
/div

const app = {
  data() {
    return {
      object: {
        name: 'www',
        url: 'http://www.123.com',
        slogan: 'hhhhh!'
      }
    }
  }
}

//6
<div id="app">
  <ul>
    <li v-for="n in evenNumbers">{{ n }}</li>
  </ul>
</div>

//7
//在自定义组件上,你可以像在任何普通元素上一样使用 v-for:

<my-component v-for="item in items" :key="item.id"></my-component>
//然而,任何数据都不会被自动传递到组件里,因为组件有自己独立的作用域。为了把迭代数据传递到组件里,我们要使用 props:

<my-component
  v-for="(item, index) in items"
  :item="item"
  :index="index"
  :key="item.id"
></my-component>

2.1组件component

组件可以扩展 HTML 元素,封装可重用的代码。

组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树:

每个 Vue 应用都是通过用 createApp 函数创建的,传递给 createApp 的选项用于配置根组件。当我们挂载应用时,该组件被用作渲染的起点。

一个应用需要被挂载到一个 DOM 元素中。

//1全局组件
<div id="app">
    <runoob></runoob>
</div>

<script>
 
// 创建一个Vue 应用
const app = Vue.createApp({})
 
// 定义一个名为 runoob 的新全局组件
app.component('runoob', {
    template: '<h1>自定义组件!</h1>'
})
 
app.mount('#app')

//2 局部组件
<div id="app">
    <runoob-a></runoob-a>
</div>
<script>
 
var runoobA = {
  template: '<h1>自定义组件!</h1>'
}
 
const app = Vue.createApp({
  components: {
    'runoob-a': runoobA
  }
})
 
app.mount('#app')
//3 prop 
//子组件与父组件之间的通信  子组件显示父组件传递的数据
<div id="app">
    <sites>{{title}} </sites>
</div>

<script>
 
// 创建一个Vue 应用
const app = Vue.createApp({
     data() {
        return {
        ....
        }
     }
})
 
// 定义一个名为 runoob 的新全局组件
app.component('sites', {
    prop:['title'],
    template: `<h1>{{title}}</h1>`
})
 
app.mount('#app')

//4  动态绑定父组件数据,当父改变子也改变
<div id="app">
    //<sites>{{title}} </sites>
    v-for="site in sites"
    :id="site.id"
    :title="site.title"
</div>

<script>
 
// 创建一个Vue 应用
const Site = {
  data() {
    return {
      sites: [
        { id: 1, title: 'Google' },
        { id: 2, title: 'Runoob' },
        { id: 3, title: 'Taobao' }
      ]
    }
  }
}
const app = Vue.createApp(Site) 
// 定义一个名为 runoob 的新全局组件
app.component('site-info', {
    prop:['id','title'],
    template: `<h1>{{id}}-{{title}}</h1>`
})
 
app.mount('#app')
</script>

//5  prop验证
Vue.component('my-component', {
  props: {
    // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
    propA: Number,
    // 多个可能的类型
    propB: [String, Number],
    // 必填的字符串
    propC: {
      type: String,
      required: true
    },
    // 带有默认值的数字
    propD: {
      type: Number,
      default: 100
    },
    // 带有默认值的对象
    propE: {
      type: Object,
      // 对象或数组默认值必须从一个工厂函数获取
      default: function () {
        return { message: 'hello' }
      }
    },
    // 自定义验证函数
    propF: {
      validator: function (value) {
        // 这个值必须匹配下列字符串中的一个
        return ['success', 'warning', 'danger'].indexOf(value) !== -1
      }
    }
  }
})

3.1计算属性

1computed 2computed的getter setter

//1
<div id="app">
  <p>原始字符串: {{ message }}</p>
  <p>计算后反转字符串: {{ reversedMessage }}</p>
</div>
    
<script>
const app = {
  data() {
    return {
      message: 'RUNOOB!!'
    }
  },
  computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
  }
  //computed methods 都可以用来计算,但是methods不需要缓存
  methods:{
     // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    } 
  }
}
 
Vue.createApp(app).mount('#app')

</script>
//2
var vm = new Vue({
  el: '#app',
  data: {
    name: 'Google',
    url: 'http://www.google.com'
  },
  computed: {
    site: {
      // getter
      get: function () {
        return this.name + ' ' + this.url
      },
      // setter
      set: function (newValue) {
        var names = newValue.split(' ')
        this.name = names[0]
        this.url = names[names.length - 1]
      }
    }
  }
})
// 调用 setter, vm.name 和 vm.url 也会被对应更新
vm.site = '菜鸟教程 http://www.runoob.com';
document.write('name: ' + vm.name);
document.write('<br>');
document.write('url: ' + vm.url);

3.2监听属性

1 watch监听事件 2 异步加载watch监听

//1
<div id = "app">
    <p style = "font-size:25px;">计数器: {{ counter }}</p>
    <button @click = "counter++" style = "font-size:25px;">点我</button>
</div>
    
<script>
const app = {
  data() {
    return {
      counter: 1
    }
  }
}
vm = Vue.createApp(app).mount('#app')
vm.$watch('counter', function(nval, oval) {
    alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!');
});
</script>

4.1样式绑定

v-bind:class 缩写为 :class

v-bind:style 缩写为 :style (内嵌样式)

//1
<style>
.static {
  width: 100px;
  height: 100px;
}
.active {
  background: green;
}
.text-danger {
  background: red;
}
</style>
</head>
<body>
<div id="app">
    <div class="static" :class="[activeClass, errorClass]"></div>
</div>

<script>
const app = {
    data() {
        return {
            activeClass: 'active',
            errorClass: 'text-danger'
        }
    }
}

Vue.createApp(app).mount('#app')
</script>

//2
<body>
<div id="app">
    <div :style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
</div>

<script>
const app = {
    data() {
        return {
            activeColor: 'red',
            fontSize: 30
        }
    }
}

Vue.createApp(app).mount('#app')
</script>
</body>
//3 v-bind:style 可以使用数组将多个样式对象应用到一个元素上
<body>
<div id="app">
    <div :style="[baseStyles, overridingStyles]">菜鸟教程</div>
</div>

<script>
const app = {
    data() {
        return {
      baseStyles: {
                color: 'green',
                fontSize: '30px'
            },
          overridingStyles: {
                'font-weight': 'bold'
            }
        }
    }
}

5.1事件处理

v-on 1 直接绑定到一个方法上 2内联js语法 3事件处理多个方法用逗号分开 4事件符 5按键符

v-on:click 或 @click

@click.once=‘’

  • 事件符

    • .stop - 阻止冒泡

    • .prevent - 阻止默认事件

    • .capture - 阻止捕获

    • .self - 只监听触发该元素的事件

    • .once - 只触发一次

    • .left - 左键事件

    • .right - 右键事件

    • .middle - 中间滚轮事件

  • 按键符

    全部的按键别名:

    • .enter

    • .tab

    • .delete (捕获 “删除” 和 “退格” 键)

    • .esc

    • .space

    • .up

    • .down

    • .left

    • .right

    系统修饰键:

    • .ctrl

    • .alt

    • .shift

    • .meta

    鼠标按钮修饰符:

    • .left

    • .right

    • .middle

//1
<div id="app">
  <!-- `greet` 是在下面定义的方法名 -->
  <button @click="greet">点我</button>
</div>
 
<script>
const app = {
  data() {
    return {
      name: 'Runoob'
    }
  },
  methods: {
    greet(event) {
      // `methods` 内部的 `this` 指向当前活动实例
      alert('Hello ' + this.name + '!')
      // `event` 是原生 DOM event
      if (event) {
        alert(event.target.tagName)
      }
    }
  }
}
 
Vue.createApp(app).mount('#app')
</script>
//2
<div id="app">
  <!-- `greet` 是在下面定义的方法名 -->
  <button @click="say('hi')">say hai</button>
</div>
 const app = {
  data() {
    return {
      name: 'Runoob'
    }
  },
  methods: {
     say(message){
       alert(message)
     }
    }
  }
}

//3
<div id="app">
  <!-- `greet` 是在下面定义的方法名 -->
  <button @click="greet",@click='onsubmit'>点我</button>
</div>
 
<script>
const app = {
  data() {
    return {
      name: 'Runoob'
    }
  },
  methods: {
    greet(event) {
      // `methods` 内部的 `this` 指向当前活动实例
      alert('Hello ' + this.name + '!')
      // `event` 是原生 DOM event
      if (event) {
        alert(event.target.tagName)
      }
    }
  }
}
 
Vue.createApp(app).mount('#app')
</script>

//4
<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联  -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->
<div v-on:click.self="doThat">...</div>

<!-- click 事件只能点击一次,2.1.4版本新增 -->
<a v-on:click.once="doThis"></a>

//5 Vue 允许为 v-on 在监听键盘事件时添加按键修饰符
<p><!-- Alt + C -->
<input @keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>

6.1表单

v-model 1v-model在input、text area 2 input在checkbox、radio 3 v-model在select 5值绑定 6修饰符(.lazy .number .trim)

//1
<div id="app">
  <p>input 元素:</p>
  <input v-model="message" placeholder="编辑我……">
  <p>input 表单消息是: {{ message }}</p>
  
  //在textarea中插值不起作用,要用v-model代替  
  <p>textarea 元素:</p>
  <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
  <p>textarea 表单消息是:</p>
  <p style="white-space: pre">{{ message2 }}</p>
  
</div>
 
<script>
const app = {
  data() {
    return {
      message: '',
      message2: '菜鸟教程\r\nhttps://www.runoob.com'
    }
  }
}
 
Vue.createApp(app).mount('#app')
</script>

//2  多个复选框做成数组
<div id="app">
  <p>单个复选框:</p>
  <input type="checkbox" id="checkbox" v-model="checked">
  <label for="checkbox">{{ checked }}</label>
    
  <p>多个复选框:</p>
  <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
  <label for="runoob">Runoob</label>
  <input type="checkbox" id="google" value="Google" v-model="checkedNames">
  <label for="google">Google</label>
  <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
  <label for="taobao">taobao</label>
  <br>
  <span>选择的值为: {{ checkedNames }}</span>
</div>
 //3  单选按钮radio
 <div id="app">
  <input type="radio" id="runoob" value="Runoob" v-model="picked">
  <label for="runoob">Runoob</label>
  <br>
  <input type="radio" id="google" value="Google" v-model="picked">
  <label for="google">Google</label>
  <br>
  <span>选中值为: {{ picked }}</span>
</div>
 
<script>
const app = {
  data() {
    return {
      picked : 'Runoob'
    }
  }
}
 
Vue.createApp(app).mount('#app')
</script>

//4
<div id="app">
  <select v-model="selected" name="site">
    <option value="">选择一个网站</option>
    <option value="www.runoob.com">Runoob</option>
    <option value="www.google.com">Google</option>
  </select>
 
  <div id="output">
      选择的网站是: {{selected}}
  </div>
</div>
//5
<!-- 当选中时,`picked` 为字符串 "a" -->
<input type="radio" v-model="picked" value="a" />

<!-- `toggle`truefalse -->
<input type="checkbox" v-model="toggle" />

<!-- 当选中第一个选项时,`selected` 为字符串 "abc" -->
<select v-model="selected">
  <option value="abc">ABC</option>
</select>

7.1自定义命令

自定义指令 app.directive(‘…’,{…})

<div id="app">
    <p>页面载入时,input 元素自动获取焦点:</p>
    <input v-focus>
</div>
 //法一
<script>
const app = Vue.createApp({})
// 注册一个全局自定义指令 `v-focus`
app.directive('focus', {
  // 当被绑定的元素挂载到 DOM 中时……
  mounted(el) {
    // 聚焦元素
    el.focus()
  }
})
app.mount('#app')
</script>
//法二
const app ={
   data(){
    return{
    }
   },
   directive:{
    focus:{
    //指令定义
    }
   }
}
Vue.createApp(app).mount('#app')
  • 钩子函数(指令定义函数提供了几个钩子函数)

    • created : 在绑定元素的属性或事件监听器被应用之前调用。

    • beforeMount : 指令第一次绑定到元素并且在挂载父组件之前调用。。

    • mounted : 在绑定元素的父组件被挂载后调用。。

    • beforeUpdate: 在更新包含组件的 VNode 之前调用。。

    • updated: 在包含组件的 VNode 及其子组件的 VNode 更新后调用。

    • beforeUnmount: 当指令与在绑定元素父组件卸载之前时,只调用一次。

    • unmounted: 当指令与元素解除绑定且父组件已卸载时,只调用一次。

import { createApp } from 'vue'
const app = createApp({})
 
// 注册
app.directive('my-directive', {
  // 指令是具有一组生命周期的钩子:
  // 在绑定元素的 attribute 或事件监听器被应用之前调用
  created() {},
  // 在绑定元素的父组件挂载之前调用
  beforeMount() {},
  // 绑定元素的父组件被挂载时调用
  mounted() {},
  // 在包含组件的 VNode 更新之前调用
  beforeUpdate() {},
  // 在包含组件的 VNode 及其子组件的 VNode 更新之后调用
  updated() {},
  // 在绑定元素的父组件卸载之前调用
  beforeUnmount() {},
  // 卸载绑定元素的父组件时调用
  unmounted() {}
})
 
// 注册 (功能指令)
app.directive('my-directive', () => {
  // 这将被作为 `mounted` 和 `updated` 调用
})
 
// getter, 如果已注册,则返回指令定义
const myDirective = app.directive('my-directive')
app.mount('#app')

钩子函数的参数:el 、binding

el el 指令绑定到的元素。这可用于直接操作 DOM。

binding binding 是一个对象,包含以下属性:

  • instance:使用指令的组件实例。

  • value:传递给指令的值。例如,在 v-my-directive="1 + 1" 中,该值为 2

  • oldValue:先前的值,仅在 beforeUpdateupdated 中可用。值是否已更改都可用。

  • arg:参数传递给指令 (如果有)。例如在 v-my-directive:foo 中,arg 为 "foo"

  • modifiers:包含修饰符 (如果有) 的对象。例如在 v-my-directive.foo.bar 中,修饰符对象为 {foo: true,bar: true}

  • dir:一个对象,在注册指令时作为参数传递。

8.1路由

<router-link> 是一个组件,该组件用于设置一个导航链接,切换不同 HTML 内容。 to 属性为目标地址, 即要显示的内容。

<router-view >将显示与 url 对应的组件。你可以把它放在任何地方,以适应你的布局

**<router-link>**属性:to 、event、replace 、apprend tag


<script src="https://unpkg.com/vue@3"></script>
<script src="https://unpkg.com/vue-router@4"></script>
 

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!--使用 router-link 组件进行导航 -->
    <!--通过传递 `to` 来指定链接 -->
    <!--`<router-link>` 将呈现一个带有正确 `href` 属性的 `<a>` 标签-->
    <router-link to="/">Go to Home</router-link>
    <router-link to="/about">Go to About</router-link>
  </p>
  <!-- 路由出口 -->
  <!-- 路由匹配到的组件将渲染在这里 -->
  <router-view></router-view>
</div>
//1. 定义路由组件.
// 也可以从其他文件导入
const Home = { template: '<div>Home</div>' }
const About = { template: '<div>About</div>' }
 
// 2. 定义一些路由
// 每个路由都需要映射到一个组件。
// 我们后面再讨论嵌套路由。
const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About },
]
 
// 3. 创建路由实例并传递 `routes` 配置
// 你可以在这里输入更多的配置,但我们在这里
// 暂时保持简单
const router = VueRouter.createRouter({
  // 4. 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式。
  history: VueRouter.createWebHashHistory(),
  routes, // `routes: routes` 的缩写
})
 
// 5. 创建并挂载根实例
const app = Vue.createApp({})
//确保 _use_ 路由实例使
//整个应用支持路由。
app.use(router)
 
app.mount('#app')
 
// 现在,应用已经启动了!

9.1mixins

混入 (mixins)定义了一部分可复用的方法或者计算属性。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。

// 定义混入对象
const myMixin = {
  created() {
    this.hello()
  },
  methods: {
    hello() {
      console.log('欢迎来到混入实例-RUNOOB!')
    }
  }
}
 
// 定义一个应用,使用混入
const app = Vue.createApp({
  mixins: [myMixin]
})
 
app.mount('#app') // => "欢迎来到混入实例-RUNOOB!"


//2选项合并
<div id = "app"></div>
<script type = "text/javascript">
const myMixin = {
  data() {
    return {
      message: 'hello',
      foo: 'runoob'
    }
  }
}
 
const app = Vue.createApp({
  mixins: [myMixin],
  data() {
    return {
      message: 'goodbye',
      bar: 'def'
    }
  },
  created() {
    document.write(JSON.stringify(this.$data)) 
  }
})

10.1axios

https://www.runoob.com/vue3/vue3-ajax-axios.html

vue-resouce在2.0版本使用较多,用来做为异步加载请求数据的技术

$.ajax(
   url:'',
   funtion(data){
   //获取数据后进行的事件 
   }
}axios({
   method:'get',
   url:'',
   
}).then(res=>{
  .....
})

链接: 学习vue之前最好学习的技术-webpack
链接: 如何快速有效搭建vue项目

希望以上内容对你有所帮助,有任何问题可以联系作者,想要资源文档可以联系作者。

简单易懂:Vue3框架三天速成 学习Vue框架首先需要具备基本的HTML5、CSS3、JavaScript基础,了解基本概念以及用法再来学习Vue会事半功倍! 阅读详情

相关推荐

动力节点|Vue3实用教程套搞定前端框架Vue2+3

024.Vue数据代理时对属性名的要求.avi.baiduyun.uploading。•026.手写Vue框架数据代理的实现.avi.baiduyun.uploading。•034.关于事件回调函数中的this.avi.baiduyun.uploading。•028.Vue框架代码解读.avi.baiduyun.uploading。•022.数据代理机制的实现.avi.baiduyun.uploading。•032.Vue的事件绑定.avi.baiduyun.uploading。

java_yydsyyds的博客 449

Vue3 基础教程(上篇)超详细整理,从入门到精通

Vue 是渐进式 JavaScript 前端框架Vue.js - 渐进式 JavaScript 框架 | Vue.js框架定义:套完整标准化项目开发解决方案,大幅降低 DOM 操作重复代码,提升前端开发效率;数据驱动视图—— 只维护 JS 内数据,页面自动同步渲染,不用手动获取 / 修改 DOM 元素;渐进式义:灵活适配不同项目规模小型页面:直接引入 Vue3 的 ESM 独立 JS 文件,无需工程化;中型项目:搭配 Vue 配套插件拓展功能;

mgw1413的博客 280

SpringBoot+Vue2超市管理系统:小时搭建背后的前后端分离实战指南

在软件开发领域,前后端分离架构已成为构建现代Web应用的主流模式。其核心原理是将用户界面(前端)与业务逻辑和数据(后端)解耦,通过API接口进行通信。这种架构模式的技术价值在于提升了开发效率、实现了技术栈的灵活选型,并有利于团队并行开发。在众多应用场景中,管理系统(如电商后台、内容管理平台)是前后端分离技术的典型实践。本文将聚焦于个具体的实战案例——基于SpringBoot和Vue2的超市管理系统,深入剖析其从环境搭建到核心功能实现的完整流程。通过理解用户登录与权限验证、商品管理的增删改查(CRUD)等关

aobu0171的博客 343

Vue3.0详细使用教程看这篇就够了!!

vue2基础,看遍就能直接上手vue3

H524268015wsw的博客 6687

Vue3 快速上手(详细)

Vue3快速上手,适合有Vue2基础的看

bguihiub的博客 5842

Trae实战:2小时速成DeepSeek AI辩论应用

本文详细记录了使用Trae AI原生IDE开发DeepSeek AI辩论赛应用的全过程。在2小时内完成了从需求分析到部署的实现,最终产品支持辩题管理、多轮辩论、AI评分等功能。开发采用Vue3+Vite技术栈,利用Trae的自动生成能力快速搭建项目框架,包括辩题数据管理、UI组件生成等核心模块。文章特别展示了如何通过精准提示词指导AI生成代码,以及DeepSeek API的集成方法。最终实现的应用具备响应式布局、本地存储和语音朗读等特性,为辩论活动组织者、参与者和裁判提供了站式解决方案。

2501_91063928的博客 983

Vue+SpringBoot】超详细!周开发个SpringBoot + Vue+MybatisPlus+Shiro+JWT+Redis前后端分离个人博客项目!!!【项目完结】

项目目录资源准备前后端分离项目技术栈Java后端接口开发1、前言2、新建Springboot项目3、整合mybatis plus3、统结果封装4、整合shiro+jwt,并会话共享ShiroConfigAccountRealmJwtTokenAccountProfileJwtFilter5、异常处理6、实体校验7、跨域问题Swagger2配置8、登录接口开发9、博客接口开发10、后端总结Vue前端页面开发1、前言2、项目演示3、环境准备4、新建项目5、安装element-ui6、安装axios7、页面路由

胡毛毛的博客 1万+

前端零基础速成前端开发路线

前端学习路线可分为四个阶段:1-2个月基础阶段(HTML/CSS/JS核心);2-3个月进阶阶段(ES6/工程化/框架);3-4个月实战阶段(电商/管理系统等项目);1个月就业准备(简历/面试题)。重点强调动手实践,建议每学完知识点立即测试,完成2-3个完整项目并优化性能。进阶者可深化框架原理、三维可视化/全栈/AI融合等方向,向架构师发展。学习过程中要避免只看不练,需定期复盘并构建作品集。

警警的博客 1907

5分钟上手!LazyVim让React/Vue开发效率提升300%的实战指南

你是否还在为前端开发环境配置浪费2小时?是否受够了编辑器卡顿、插件冲突和手动格式化代码?本文将带你用LazyVim打造毫秒级响应的React/Vue/TypeScript开发环境,5分钟完成从安装到高效编码的全流程,让你专注业务逻辑而非工具配置。 读完本文你将获得: - 键搭建支持JSX/TSX语法高亮的Neovim环境 - 掌握TypeScript类型自动补全与重构技巧 - 学会React组...

gitblog_01042的博客 413

全栈开发速成指南:从零到构建高薪竞争力

全栈开发作为现代Web开发的核心模式,涵盖了从前端用户界面到后端服务器、数据库及业务逻辑的完整技术栈。其原理在于通过掌握多种技术协同工作,实现从需求到产品的端到端交付能力。这项技术的价值在于培养开发者对软件系统全局的深刻理解,形成完整的技术闭环,从而在就业市场获得更强的独立性和竞争力。在应用场景上,全栈技能尤其适合中小型企业、创业公司以及个人项目孵化,能够独立完成产品从设计到部署的全过程。本文以构建个博客系统为例,详细拆解了全栈开发的学习路径,并提供了基于Node.js和Express的实战代码示例,帮助

weixin_34133829的博客 526

Taro跨端开发:4周速成实战指南

Taro跨端开发学习路径(4-8周) 本学习路径专为0基础开发者设计,系统掌握Taro跨端开发能力。分为4个阶段: 基础准备(1周):搭建开发环境,理解Taro编译原理,完成首个跨端项目(小程序+H5)运行,掌握React/Vue基础语法。 项目实战(2-3周):开发跨端通用组件,实现状态管理(Redux/MobX),完成待办事项Demo(多页面交互、数据持久化)。 进阶能力(1-2周):调用原生API(相册/定位),处理多端差异(条件编译),优化性能(包体积分析、懒加载)。 工程化(1周):配置CI/C

警警的博客 1189

【AZ-305冲刺必备】:30小时速成微软云架构设计核心技能体系

掌握MCP AZ-305 架构设计题核心解法,30小时系统攻克微软云架构设计难题。涵盖真实考试场景、高频考点解析与实战架构模型,助你高效备考、次通过。架构设计能力全面提升,值得收藏。

DeepLens的博客 619

个人认为目前自学前端进步最快的方法!

39、is如何判空?「空」包了:空数组、空对象、空字符串、0、undefined、nul、空 map、空 set,都属于为空的数据【热度:640】28、如何在划词选择的文本上添加右键菜单(划词:标滑动选择组字符,对组字符进行操作)【热度:100】29、富文本里面,是如何做到划词的(鼠标滑动选择组字符,对组字符进行操作)?用 Lighthouse 给项目打分 → 死磕到90+分(压缩/懒加载/CDN)37、dom 里面,如何判定a元素是否是b元素的子元素【热度: 400

2401_86373285的博客 2113

Vue3开发环境深度配置:从Node版本管理到Vite优化与组件库清理

现代前端开发中,Node.js版本管理和包管理器选择是项目稳定性的基石。通过nvm实现多版本隔离,能有效避免因Node版本不致导致的兼容性问题;而pnpm等现代包管理器利用硬链接和符号链接机制,解决了传统npm平铺结构下的依赖分身和幽灵依赖问题,显著提升安装效率和磁盘利用率。这些底层优化为构建高性能应用提供了坚实基础。结合Vite构建工具,开发者可以进步配置路径别名、开发服务器代理和环境变量,实现高效的本地开发和部署流程。在实际工程实践中,针对Vue3生态中组件库的安装与彻底清理,以及通过Husky和l

weixin_33725807的博客 428

Codex本地化安装配置实战:从模型下载到Vue项目错误处理自动化

Codex并非开箱即用的AI编程工具,而是套需深度对齐模型、运行时、协议与集成四层的本地代码生成框架。其核心原理在于通过量化模型(如deepseek-coder-1.3b-instruct)在llama.cpp等轻量推理引擎上执行上下文感知的代码补全,技术价值体现在隐私可控、低延迟响应与IDE深度协同。典型应用场景包括前端Vue/React项目中的重复逻辑自动化(如API错误处理)、Java微服务异常封装、嵌入式固件注释生成等。本文聚焦Codex安装配置与项目实战,覆盖GGUF模型下载校验、Metal/C

446

Oracle OCI AI/ML认证真相:免费学习券≠免费发证

Oracle云认证(OCI)是面向企业级云服务操作与集成的权威资质,其AI/ML方向并非教授机器学习算法,而是聚焦于OCI Data Science、Object Storage、Vault等服务的工程化部署与安全协同。核心原理在于通过真实云环境实操,掌握AI工作流在OCI上的构建、成本控制与权限治理。该认证的技术价值体现在提升云原生AI交付效率与生产稳定性,广泛应用于金融风控、智能运维、SaaS数据服务等需合规、可审计、可扩展AI能力的场景。本文深入拆解OCI AI/ML Specialist(1Z0-1

weixin_33946020的博客 693

盼少-Web Developer:前端新人的慢建构成长路径

Web开发入门本质是构建对浏览器运行机制的系统性认知,而非堆砌框架API。从HTML语义化到CSS盒模型,从JavaScript执行上下文到事件循环,底层原理决定代码健壮性与调试效率。现代前端工程强调Vite等轻量工具链带来的即时反馈、配置透明与生态适配能力,而Vue 3 Composition API则以问题驱动方式降低响应式心智负担。真实项目闭环——如GitHub Pages部署、Lighthouse性能优化、Git协作规范——将知识转化为可验证的工程能力。‘盼少’所代表的不是速成捷径,而是聚焦基础、尊

diaoqi6581的博客 422

前端转型AI应用开发

前端工程师AI实战速成指南》提供了套2周掌握AI开发能力的完整路线。文章指出,2026年"会AI的前端"将成为招聘标配,重点在于将大模型能力融入UI交互而非算法研究。 学习路线分为7个核心模块: 理解前端+AI的价值定位 掌握大模型交互逻辑 使用Bun.js快速搭建AI应用 LangChain实战(智能客服/表单填充)

weixin_45526015的博客 846
上一篇: Javascript 教程/速成/全面 /总结【含代码】
下一篇: 如何运行PHP文件 /创建PHP项目【基于VScode、XAMPP】超级详细,亲测有效,这一篇就够了
champion564
博客等级 码龄6年 2179粉丝 53原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值