Vue3

Vue是一套构建用户界面的渐进式框架。只关注视图层, 采用自底向上增量开发的设计。目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

引入 Vue 的 JS 文件:

<script src="https://unpkg.com/vue@next"></script>

data 选项:

是一个函数。Vue 在创建新组件实例的过程中调用此函数。它应该返回一个对象,然后 Vue 会通过响应性系统将其包裹起来,并以 $data 的形式存储在组件实例中。

const app = Vue.createApp({
  data() {
    return { count: 4 }
  }
})

const vm = app.mount('#app')

document.write(vm.$data.count) // => 4
document.write("<br>")
document.write(vm.count)       // => 4
document.write("<br>")
// 修改 vm.count 的值也会更新 $data.count
vm.count = 5
document.write(vm.$data.count) // => 5
document.write("<br>")
// 反之亦然
vm.$data.count = 6
document.write(vm.count) // => 6

 

方法:

const app = Vue.createApp({
  data() {
    return { count: 4 }
  },
  methods: {
    increment() {
      // `this` 指向该组件实例
      this.count++
    }
  }
})

const vm = app.mount('#app')

document.write(vm.count) // => 4
document.write("<br>")
vm.increment()

document.write(vm.count) // => 5

 

数据绑定最常见的形式就是使用 {{...}}(双大括号)的文本插值:

<div id="app">

<p>{{ message }}</p>

</div>

{{...}} 标签的内容将会被替代为对应组件实例中 message 属性的值,如果 message 属性的值发生了改变,{{...}} 标签内容也会更新。

如果不想改变标签的内容,可以通过使用 v-once 指令执行一次性地插值,当数据改变时,插值处的内容不会更新。

<span v-once>这个将不会改变: {{ message }}</span>

 

使用 v-html 指令用于输出 html 代码:

<div id="example1" class="demo">

<p>使用双大括号的文本插值: {{ rawHtml }}</p>

<p>使用 v-html 指令: <span v-html="rawHtml"></span></p></div>

<script>

const RenderHtmlApp = {

  data() {

       return {

rawHtml: '<span style="color: red">这里会显示红色!</span>'

                 }

              }

          }

Vue.createApp(RenderHtmlApp).mount('#example1')

</script>

 

HTML 属性中的值应使用 v-bind 指令。

<div v-bind:id="dynamicId"></div>

对于布尔属性,常规值为 true 或 false,如果属性值为 null 或 undefined,则该属性不会显示出来。

<button v-bind:disabled="isButtonDisabled">按钮</button>

 

<div id="app">

<label for="r1">修改颜色</label>

<input type="checkbox" v-model="use" id="r1">

<br><br>

<div v-bind:class="{'class1': use}"> v-bind:class 指令 </div></div>

<script> const app = { data() { return { use: false

           }

       }

     }

Vue.createApp(app).mount('#app')

</script>

 

Vue.js 都提供了完全的 JavaScript 表达式支持。

<div id="app"> {{5+5}}

<br>

{{ ok ? 'YES' : 'NO' }}

<br>

{{ message.split('').reverse().join('') }}

<div v-bind:id="'list-' + id">菜鸟教程</div> </div>

<script> const app = {

           data() {

               return {

                           ok: true, message: 'RUNOOB!!', id: 1

                  }

             }

          }

Vue.createApp(app).mount('#app')

</script>

</script>

 

 v-if 指令将根据表达式 的值( true 或 false )来决定是否执行被包含的代码

可以用 v-else 指令给 v-if 添加一个 "else" 块

v-else-if 即 v-if 的 else-if 块,可以链式的使用多次

v-for 指令可以绑定数组的数据来渲染一个项目列表。

<div id="app">
  <ol>
    <li v-for="site in sites">
      {{ site.text }}
    </li>
  </ol>
</div>
<script>
const app = {
  data() {
    return {
      sites: [
        { text: 'Google' },
        { text: 'Runoob' },
        { text: 'Taobao' }
      ]
    }
  }
}

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

v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名。

参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性。

 

 v-on 指令,它用于监听 DOM 事件:

<!-- 完整语法 -->

<a v-on:click="doSomething"> ... </a>

<!-- 缩写 -->

<a @click="doSomething"> ... </a>

<!-- 动态参数的缩写 (2.6.0+) -->

<a @[event]="doSomething"> ... </a>

按钮的事件我们可以使用 v-on 监听事件,并对用户的输入进行响应。

 

v-model 指令用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值。

  • text 和 textarea 元素使用 value 属性和 input 事件;
  • checkbox 和 radio 使用 checked 属性和 change 事件;
  • select 字段将 value 作为属性并将 change 作为事件。

 v-show 指令来根据条件展示元素

 

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

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

注册一个全局组件:

const app = Vue.createApp({...})

app.component('my-component-name', {

/* ... */

})

my-component-name 为组件名,/* ... */ 部分为配置选项。注册后,我们可以使用以下方式来调用组件:

<my-component-name></my-component-name>

 

局部组件:

const ComponentA = {

 /* ... */

}

const ComponentB = {

/* ... */

}

const ComponentC = {

/* ... */

}

 

然后在 components 选项中定义你想要使用的组件:

const app = Vue.createApp({

components: {

'component-a': ComponentA,

'component-b': ComponentB

}})

 

对于 components 对象中的每个属性来说,其属性名就是自定义元素的名字(component-a、component-b),其属性值就是这个组件的选项对象(ComponentA、ComponentB)。

 

 

prop 是子组件用来接受父组件传递过来的数据的一个自定义属性。

 

父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 "prop":

类似于用 v-bind 绑定 HTML 特性到一个表达式,也可以用 v-bind 动态绑定 props 的值到父组件的数据中。每当父组件的数据变化时,该变化也会传导给子组件。

组件可以为 props 指定验证要求。

为了定制 prop 的验证方式,你可以为 props 中的值提供一个带有验证需求的对象,而不是一个字符串数组。

当 prop 验证失败的时候,(开发环境构建版本的) Vue 将会产生一个控制台的警告。

 

Vue 路由允许我们通过不同的 URL 访问不同的内容。

通过 Vue 可以实现多视图的单页 Web 应用(single page web application,SPA)。

Vue.js 路由需要载入 vue-router 库

引入样式:<script src="https://unpkg.com/vue-router@4"></script>

使用一个自定义组件 router-link 来创建链接。

<router-link to="/">Go to Home</router-link>

<router-link to="/about">Go to About</router-link>

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

 

Vue 版本推荐使用 axios 来完成 ajax 请求。

引入样式:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

Vue.axios.get(api).then((response) => {
  console.log(response.data)
})

this.axios.get(api).then((response) => {
  console.log(response.data)
})

this.$http.get(api).then((response) => {
  console.log(response.data)
})

get方法:(获取json数据)
const app = {
data() {
return {
info: 'Ajax 测试!!'
}
}, mounted () {
axios .get('https://www.runoob.com/try/ajax/json_demo.json')
.then(response => (this.info = response))
.catch(function (error) {
// 请求失败处理 console.log(error);
});
} }
Vue.createApp(app).mount('#app')

GET 方法传递参数:
// 直接在 URL 上添加参数 ID=12345
axios.get('/user?ID=12345')
.then(function (response) {
console.log(response); })
.catch(function (error) {
console.log(error); });
// 也可以通过 params 设置参数:
axios.get('/user', {
params: { ID: 12345 } })
.then(function (response) {
console.log(response); })
.catch(function (error) {
console.log(error); });

post方法:
new Vue({
el: '#app', data () {
return { info: null } },
mounted () {
axios .post('https://www.runoob.com/try/ajax/demo_axios_post.php')
.then(response => (this.info = response))
.catch(function (error) {
// 请求失败处理 console.log(error); }); } })

POST 方法传递参数:
axios.post('/user', {
firstName: 'Fred',
// 参数 firstName lastName: 'Flintstone'
// 参数 lastName })
.then(function (response) {
console.log(response); })
.catch(function (error) {
console.log(error); });

请求方法的别名:
axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])


创建请求时可用的配置选项,注意只有 url 是必需的。如果没有指定 method,请求将默认使用 get 方法。
{
  // `url` 是用于请求的服务器 URL
  url: "/user",

  // `method` 是创建请求时使用的方法
  method: "get", // 默认是 get

  // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
  baseURL: "https://some-domain.com/api/",

  // `transformRequest` 允许在向服务器发送前,修改请求数据
  // 只能用在 "PUT", "POST" 和 "PATCH" 这几个请求方法
  // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
  transformRequest: [function (data) {
    // 对 data 进行任意转换处理

    return data;
  }],

  // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
  transformResponse: [function (data) {
    // 对 data 进行任意转换处理

    return data;
  }],

  // `headers` 是即将被发送的自定义请求头
  headers: {"X-Requested-With": "XMLHttpRequest"},

  // `params` 是即将与请求一起发送的 URL 参数
  // 必须是一个无格式对象(plain object)或 URLSearchParams 对象
  params: {
    ID: 12345
  },

  // `paramsSerializer` 是一个负责 `params` 序列化的函数
  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  paramsSerializer: function(params) {
    return Qs.stringify(params, {arrayFormat: "brackets"})
  },

  // `data` 是作为请求主体被发送的数据
  // 只适用于这些请求方法 "PUT", "POST", 和 "PATCH"
  // 在没有设置 `transformRequest` 时,必须是以下类型之一:
  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  // - 浏览器专属:FormData, File, Blob
  // - Node 专属: Stream
  data: {
    firstName: "Fred"
  },

  // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
  // 如果请求花费了超过 `timeout` 的时间,请求将被中断
  timeout: 1000,

  // `withCredentials` 表示跨域请求时是否需要使用凭证
  withCredentials: false, // 默认的

  // `adapter` 允许自定义处理请求,以使测试更轻松
  // 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).
  adapter: function (config) {
    /* ... */
  },

  // `auth` 表示应该使用 HTTP 基础验证,并提供凭据
  // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
  auth: {
    username: "janedoe",
    password: "s00pers3cret"
  },

  // `responseType` 表示服务器响应的数据类型,可以是 "arraybuffer", "blob", "document", "json", "text", "stream"
  responseType: "json", // 默认的

  // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称
  xsrfCookieName: "XSRF-TOKEN", // default

  // `xsrfHeaderName` 是承载 xsrf token 的值的 HTTP 头的名称
  xsrfHeaderName: "X-XSRF-TOKEN", // 默认的

  // `onUploadProgress` 允许为上传处理进度事件
  onUploadProgress: function (progressEvent) {
    // 对原生进度事件的处理
  },

  // `onDownloadProgress` 允许为下载处理进度事件
  onDownloadProgress: function (progressEvent) {
    // 对原生进度事件的处理
  },

  // `maxContentLength` 定义允许的响应内容的最大尺寸
  maxContentLength: 2000,

  // `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject  promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejecte
  validateStatus: function (status) {
    return status &gt;= 200 &amp;&amp; status &lt; 300; // 默认的
  },

  // `maxRedirects` 定义在 node.js 中 follow 的最大重定向数目
  // 如果设置为0,将不会 follow 任何重定向
  maxRedirects: 5, // 默认的

  // `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:
  // `keepAlive` 默认没有启用
  httpAgent: new http.Agent({ keepAlive: true }),
  httpsAgent: new https.Agent({ keepAlive: true }),

  // "proxy" 定义代理服务器的主机名称和端口
  // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
  // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
  proxy: {
    host: "127.0.0.1",
    port: 9000,
    auth: : {
      username: "mikeymike",
      password: "rapunz3l"
    }
  },

  // `cancelToken` 指定用于取消请求的 cancel token
  // (查看后面的 Cancellation 这节了解更多)
  cancelToken: new CancelToken(function (cancel) {
  })
}



axios请求的响应包含以下信息:
{
  // `data` 由服务器提供的响应
  data: {},

  // `status`  HTTP 状态码
  status: 200,

  // `statusText` 来自服务器响应的 HTTP 状态信息
  statusText: "OK",

  // `headers` 服务器响应的头
  headers: {},

  // `config` 是为请求提供的配置信息
  config: {}
}


拦截器:
在请求或响应被 then 或 catch 处理前拦截它们
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });






 

 



 

 

posted @ 2021-07-13 15:15  阿丹biu  阅读(44)  评论(0编辑  收藏  举报