九、1~8文章的阶段案例

news2024/11/23 12:02:39

一、案例

现在我们来做一个相对综合一点的练习:书籍购物车

案例说明: 

  • 1.在界面上以表格的形式,显示一些书籍的数据;
  • 2.在底部显示书籍的总价格;
  • 3.点击+或者-可以增加或减少书籍数量(如果为1,那么不能继续-);
  • 4.点击移除按钮,可以将书籍移除(当所有的书籍移除完毕时,显示:购物车为空~);

我们看下下面代码 目前我们只是实现了 1 2 部分。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      table {
        border-collapse: collapse;
        text-align: center;
      }
      thead {
        background-color: #f5f5f5;
      }
      th,
      td {
        border: 1px solid #aaa;
        padding: 8px 16px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- 1. 搭建界面内容 -->
      <table>
        <thead>
          <tr>
            <th>序号</th>
            <th>书籍名称</th>
            <th>出版日期</th>
            <th>价格</th>
            <th>购买数量</th>
            <th>操作</th>
          </tr>
        </thead>
        <tbody>
          <!-- 如果key绑定的值是一个变量,需要使用冒号来进行绑定, 否则Vue会将该值作为字符串进行处理,从而无法实现正确的渲染和响应式。 -->
          <tr v-for="(item, index) in books" :key="item.id">
            <td>{{ index + 1 }}</td>
            <td>{{ item.name }}</td>
            <td>{{ item.date }}</td>
            <td>{{ formatPrice(item.price) }}</td>
            <td>
              <button @click="decrement">-</button>
              {{ item.count }}
              <button @click="increment">+</button>
            </td>
            <td><button>移除</button></td>
          </tr>
        </tbody>
      </table>
      <h2>总价: {{ formatPrice(totalPrice) }}</h2>
    </div>
    <script src="../lib/vue.js"></script>
    <script src="./data/data.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data() {
          return {
            books: books,
          }
        },
        computed: {
          totalPrice() {
            // 1. 直接遍历books
            // let price = 0
            // for (const item of this.books) {
            //   price += item.price * item.count
            // }
            // return price

            // 2. reduce(后面再用这种方法)
            return this.books.reduce((preValue, item) => {
              return preValue + item.price * item.count
            }, 0)
          },
        },
        methods: {
          formatPrice(price) {
            return "¥" + price
          },
          decrement() {
            console.log("点击-")
          },
          increment() {
            console.log("点击+")
          },
        },
      })

      app.mount("#app")
    </script>
  </body>
</html>

(1) 问题1:我每一行都有购买数量的加减号,当我点加减号按钮的时候,我怎么获取我想要加的具体是哪一本书呢?我点击移除我怎么区分出来我想移除的是哪一本书呢?

 

思路:我只要能拿到我点击的这本书的索引我就能区分。

那我们看下数据books的结构。 数组里面嵌套对象,所以我们在点击加减号的时候,我们把索引传入到那个函数中,那函数是不是知道是书的id了?我们通过这个索引去books中获取。

this.books[index].count--

下面附源码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      table {
        border-collapse: collapse;
        text-align: center;
      }
      thead {
        background-color: #f5f5f5;
      }
      th,
      td {
        border: 1px solid #aaa;
        padding: 8px 16px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- 1. 搭建界面内容 -->
      <table>
        <thead>
          <tr>
            <th>序号</th>
            <th>书籍名称</th>
            <th>出版日期</th>
            <th>价格</th>
            <th>购买数量</th>
            <th>操作</th>
          </tr>
        </thead>
        <tbody>
          <!-- 如果key绑定的值是一个变量,需要使用冒号来进行绑定, 否则Vue会将该值作为字符串进行处理,从而无法实现正确的渲染和响应式。 -->
          <tr v-for="(item, index) in books" :key="item.id">
            <td>{{ index + 1 }}</td>
            <td>{{ item.name }}</td>
            <td>{{ item.date }}</td>
            <td>{{ formatPrice(item.price) }}</td>
            <td>
              <button @click="decrement(index)">-</button>
              {{ item.count }}
              <button @click="increment(item)">+</button>
            </td>
            <td><button >移除</button></td>
          </tr>
        </tbody>
      </table>
      <h2>总价: {{ formatPrice(totalPrice) }}</h2>
    </div>
    <script src="../lib/vue.js"></script>
    <script src="./data/data.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data() {
          return {
            books: books,
          }
        },
        computed: {
          // 计算属性会监听依赖的响应式数据,如果依赖的数据发生变化,他也会重新计算。
          totalPrice() {
            // 1. 直接遍历books
            // let price = 0
            // for (const item of this.books) {
            //   price += item.price * item.count
            // }
            // return price

            // 2. reduce(后面再用这种方法)
            return this.books.reduce((preValue, item) => {
              return preValue + item.price * item.count
            }, 0)
          },
        },
        methods: {
          formatPrice(price) {
            return "¥" + price
          },
          decrement(index) {
            this.books[index].count--
          },
          // 也可以传item,直接把整条数据拿过来
          increment(item) {
            console.log("点击+")
            item.count++
          },
        },
      })

      app.mount("#app")
    </script>
  </body>
</html>

(2)问题2:当数量为1的时候,减号按钮➖置灰

之前我是想过button按钮的置灰不置灰是有一个display属性,我将他的属性值通过data里面一个displayed属性去绑定,发现不能这么玩。因为我改变了data里面的displayed之后,界面所有的减号全部变成了置灰,因为我绑定的是data里面的displayed。

这让我考虑到不能绑定同一个值,所以我想办法让他各自绑定各自的。

思路来了,那我该怎么绑定呢?我可以根据每一行数据的count值来判断他要不要置灰不是吗?

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      table {
        border-collapse: collapse;
        text-align: center;
      }
      thead {
        background-color: #f5f5f5;
      }
      th,
      td {
        border: 1px solid #aaa;
        padding: 8px 16px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- 1. 搭建界面内容 -->
      <table>
        <thead>
          <tr>
            <th>序号</th>
            <th>书籍名称</th>
            <th>出版日期</th>
            <th>价格</th>
            <th>购买数量</th>
            <th>操作</th>
          </tr>
        </thead>
        <tbody>
          <!-- 如果key绑定的值是一个变量,需要使用冒号来进行绑定, 否则Vue会将该值作为字符串进行处理,从而无法实现正确的渲染和响应式。 -->
          <tr v-for="(item, index) in books" :key="item.id">
            <td>{{ index + 1 }}</td>
            <td>{{ item.name }}</td>
            <td>{{ item.date }}</td>
            <td>{{ formatPrice(item.price) }}</td>
            <td>
              <button @click="decrement(index)" :disabled="item.count <= 1">-</button>
              {{ item.count }}
              <button @click="increment(item)">+</button>
            </td>
            <td><button >移除</button></td>
          </tr>
        </tbody>
      </table>
      <h2>总价: {{ formatPrice(totalPrice) }}</h2>
    </div>
    <script src="../lib/vue.js"></script>
    <script src="./data/data.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data() {
          return {
            books: books,
          }
        },
        computed: {
          // 计算属性会监听依赖的响应式数据,如果依赖的数据发生变化,他也会重新计算。
          totalPrice() {
            // 1. 直接遍历books
            // let price = 0
            // for (const item of this.books) {
            //   price += item.price * item.count
            // }
            // return price

            // 2. reduce(后面再用这种方法)
            return this.books.reduce((preValue, item) => {
              return preValue + item.price * item.count
            }, 0)
          },
        },
        methods: {
          formatPrice(price) {
            return "¥" + price
          },
          decrement(index) {
            this.books[index].count--
          },
          // 也可以传item,直接把整条数据拿过来
          increment(item) {
            console.log("点击+")
            item.count++
          },
        },
      })

      app.mount("#app")
    </script>
  </body>
</html>

(3)移除操作

使用array.splice(index, 1)去删除数组里面的元素,index 是要删除元素的下标,1 表示删除的元素个数。

直接附上源码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      table {
        border-collapse: collapse;
        text-align: center;
      }
      thead {
        background-color: #f5f5f5;
      }
      th,
      td {
        border: 1px solid #aaa;
        padding: 8px 16px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- 1. 搭建界面内容 -->
      <table>
        <thead>
          <tr>
            <th>序号</th>
            <th>书籍名称</th>
            <th>出版日期</th>
            <th>价格</th>
            <th>购买数量</th>
            <th>操作</th>
          </tr>
        </thead>
        <tbody>
          <!-- 如果key绑定的值是一个变量,需要使用冒号来进行绑定, 否则Vue会将该值作为字符串进行处理,从而无法实现正确的渲染和响应式。 -->
          <tr v-for="(item, index) in books" :key="item.id">
            <td>{{ index + 1 }}</td>
            <td>{{ item.name }}</td>
            <td>{{ item.date }}</td>
            <td>{{ formatPrice(item.price) }}</td>
            <td>
              <button @click="decrement(index)" :disabled="item.count <= 1">-</button>
              {{ item.count }}
              <button @click="increment(item)">+</button>
            </td>
            <td><button @click="removeBook(index)">移除</button></td>
          </tr>
        </tbody>
      </table>
      <h2>总价: {{ formatPrice(totalPrice) }}</h2>
    </div>
    <script src="../lib/vue.js"></script>
    <script src="./data/data.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data() {
          return {
            books: books,
          }
        },
        computed: {
          // 计算属性会监听依赖的响应式数据,如果依赖的数据发生变化,他也会重新计算。
          totalPrice() {
            // 1. 直接遍历books
            // let price = 0
            // for (const item of this.books) {
            //   price += item.price * item.count
            // }
            // return price

            // 2. reduce(后面再用这种方法)
            return this.books.reduce((preValue, item) => {
              return preValue + item.price * item.count
            }, 0)
          },
        },
        methods: {
          formatPrice(price) {
            return "¥" + price
          },
          decrement(index) {
            this.books[index].count--
          },
          // 也可以传item,直接把整条数据拿过来
          increment(item) {
            console.log("点击+")
            item.count++
          },
          removeBook(index) {
            this.books.splice(index, 1)
          },
        },
      })

      app.mount("#app")
    </script>
  </body>
</html>

(4)删到最后一个,显示”购物车没有已选择的商品啦“

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      table {
        border-collapse: collapse;
        text-align: center;
      }
      thead {
        background-color: #f5f5f5;
      }
      th,
      td {
        border: 1px solid #aaa;
        padding: 8px 16px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- 1. 搭建界面内容 -->
      <template v-if="books.length">
        <table>
          <thead>
            <tr>
              <th>序号</th>
              <th>书籍名称</th>
              <th>出版日期</th>
              <th>价格</th>
              <th>购买数量</th>
              <th>操作</th>
            </tr>
          </thead>
          <tbody>
            <!-- 如果key绑定的值是一个变量,需要使用冒号来进行绑定, 否则Vue会将该值作为字符串进行处理,从而无法实现正确的渲染和响应式。 -->
            <tr v-for="(item, index) in books" :key="item.id">
              <td>{{ index + 1 }}</td>
              <td>{{ item.name }}</td>
              <td>{{ item.date }}</td>
              <td>{{ formatPrice(item.price) }}</td>
              <td>
                <button @click="decrement(index)" :disabled="item.count <= 1">-</button>
                {{ item.count }}
                <button @click="increment(item)">+</button>
              </td>
              <td><button @click="removeBook(index)">移除</button></td>
            </tr>
          </tbody>
        </table>
        <h2>总价: {{ formatPrice(totalPrice) }}</h2>
      </template>

      <template v-else>
        <h1>购物车为空,请添加喜欢的书籍~</h1>
      </template>
    </div>
    <script src="../lib/vue.js"></script>
    <script src="./data/data.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data() {
          return {
            books: books,
          }
        },
        computed: {
          // 计算属性会监听依赖的响应式数据,如果依赖的数据发生变化,他也会重新计算。
          totalPrice() {
            // 1. 直接遍历books
            // let price = 0
            // for (const item of this.books) {
            //   price += item.price * item.count
            // }
            // return price

            // 2. reduce(后面再用这种方法)
            return this.books.reduce((preValue, item) => {
              return preValue + item.price * item.count
            }, 0)
          },
        },
        methods: {
          formatPrice(price) {
            return "¥" + price
          },
          decrement(index) {
            this.books[index].count--
          },
          // 也可以传item,直接把整条数据拿过来
          increment(item) {
            console.log("点击+")
            item.count++
          },
          removeBook(index) {
            this.books.splice(index, 1)
          },
        },
      })

      app.mount("#app")
    </script>
  </body>
</html>

(5)有一些数据,实现功能:点击A选中A,点击B选中B,A变成未选中状态。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <ul>
        <li v-for="item in movies">{{ item }}</li>
      </ul>
    </div>
    <script src="../lib/vue.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data() {
          return {
            movies: ["星际穿越", "阿凡达", "大话西游", "黑客帝国"],
          }
        },
      })

      app.mount("#app")
    </script>
  </body>
</html>

 

思路:控制active放在哪个元素上面。

 我直接这样子写的话 每个元素都会被active

 

我们先来一个简单的需求,将索引值为1的li添加上active 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .active {
        color: red;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <ul>
        <!-- <h2 :class="{title: true}"></h2> -->

        <!-- 对active的class进行动态绑定 -->
        <!-- 需求:将索引值为1的li添加上active -->
        <li :class="{active: index === 1}" v-for="(item, index) in movies">{{ item }}</li>
      </ul>
    </div>
    <script src="../lib/vue.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data() {
          return {
            movies: ["星际穿越", "阿凡达", "大话西游", "黑客帝国"],
          }
        },
      })

      app.mount("#app")
    </script>
  </body>
</html>

功能是不是实现了?哈哈 

 


 那怎么 选中哪就给哪一个添加active呢

思路:用一个变量(属性)记录当前点击的位置

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .active {
        color: red;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <ul>
        <!-- <h2 :class="{title: true}"></h2> -->

        <!-- 对active的class进行动态绑定 -->
        <!-- 需求1:将索引值为1的li添加上active -->
        <!-- 需求2 选中哪就给哪一个添加active 思路:用一个变量(属性)记录当前点击的位置-->
        <li :class="{active: index === currentIndex}" v-for="(item, index) in movies" @click="liClick(index)">{{ item }}</li>
      </ul>
    </div>
    <script src="../lib/vue.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data() {
          return {
            movies: ["星际穿越", "阿凡达", "大话西游", "黑客帝国"],
            currentIndex: -1,
          }
        },
        methods: {
          liClick(index) {
            this.currentIndex = index
          },
        },
      })

      app.mount("#app")
    </script>
  </body>
</html>

那上面购物车的案例,我们也给他实现这个功能。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      table {
        border-collapse: collapse;
        text-align: center;
      }
      thead {
        background-color: #f5f5f5;
      }
      th,
      td {
        border: 1px solid #aaa;
        padding: 8px 16px;
      }
      .active {
        background: skyblue;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- 1. 搭建界面内容 -->
      <template v-if="books.length">
        <table>
          <thead>
            <tr>
              <th>序号</th>
              <th>书籍名称</th>
              <th>出版日期</th>
              <th>价格</th>
              <th>购买数量</th>
              <th>操作</th>
            </tr>
          </thead>
          <tbody>
            <!-- 如果key绑定的值是一个变量,需要使用冒号来进行绑定, 否则Vue会将该值作为字符串进行处理,从而无法实现正确的渲染和响应式。 -->
            <tr v-for="(item, index) in books" :key="item.id" @click="rowClick(index)" :class="{ active: index === currentIndex }">
              <td>{{ index + 1 }}</td>
              <td>{{ item.name }}</td>
              <td>{{ item.date }}</td>
              <td>{{ formatPrice(item.price) }}</td>
              <td>
                <button @click="decrement(index)" :disabled="item.count <= 1">-</button>
                {{ item.count }}
                <button @click="increment(item)">+</button>
              </td>
              <td><button @click="removeBook(index)">移除</button></td>
            </tr>
          </tbody>
        </table>
        <h2>总价: {{ formatPrice(totalPrice) }}</h2>
      </template>

      <template v-else>
        <h1>购物车为空,请添加喜欢的书籍~</h1>
      </template>
    </div>
    <script src="../lib/vue.js"></script>
    <script src="./data/data.js"></script>

    <script>
      const app = Vue.createApp({
        // data: option api
        data() {
          return {
            books: books,
            currentIndex: 0,
          }
        },
        computed: {
          // 计算属性会监听依赖的响应式数据,如果依赖的数据发生变化,他也会重新计算。
          totalPrice() {
            // 1. 直接遍历books
            // let price = 0
            // for (const item of this.books) {
            //   price += item.price * item.count
            // }
            // return price

            // 2. reduce(后面再用这种方法)
            return this.books.reduce((preValue, item) => {
              return preValue + item.price * item.count
            }, 0)
          },
        },
        methods: {
          formatPrice(price) {
            return "¥" + price
          },
          decrement(index) {
            this.books[index].count--
          },
          // 也可以传item,直接把整条数据拿过来
          increment(item) {
            console.log("点击+")
            item.count++
          },
          removeBook(index) {
            this.books.splice(index, 1)
          },
          rowClick(index) {
            this.currentIndex = index
          },
        },
      })

      app.mount("#app")
    </script>
  </body>
</html>

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文精读】ISBI 2022 - Retinal Vessel Segmentation with Pixel-wise Adaptive Filters

【论文精读】ISBI 2022 - Retinal Vessel Segmentation with Pixel-wise Adaptive Filters 【论文原文】&#xff1a;Retinal Vessel Segmentation with Pixel-wise Adaptive Filters 【作者信息】&#xff1a;Li, Mingxing and Zhou, Shenglong and Chen, Chang and Zhang, …

【Linux】线程-线程控制

线程控制 线程控制线程创建线程终止线程等待分离线程 线程控制 使用线程需要注意的是&#xff0c;需要引入头文件pthread.h&#xff0c;并且在编译的时候&#xff0c;需要使用-lpthread 线程创建 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*…

QT中TCP的学习

文章目录 qt中TCP的实现 qt中TCP的实现 学习视频 QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程 下方的信号都是系统提供的&#xff0c;我们只需要写相应的槽函数 A、服务器&#xff1a; 创建QTcpServer对象启动服务器&#xff08;监听&…

Flutter ListView组件详解

今天是2023年4月24日 今天重新复习了一下关于ListView的内容&#xff0c;现在就重新整理一下关于ListView的内容和理解 : (1)ListView和Column之间有什么区别&#xff1f; 在我理解中ListView和Column都是可以有很多子组件的组件&#xff0c;它们之间区别在于它们排列的形式和…

python实现AI写歌词GUI版本【文末源码】

**引言&#xff1a;**自然语言处理作为人工智能的一个重要分支&#xff0c;在我们的生活中得到了广泛应用。其中RNN算法作为自然语言处理的经典算法之一&#xff0c;是文本生成的重要手段。而今天我们就将利用RNN算法建立一个写歌词的软件。其中的界面如下&#xff1a; RNN指的…

使用binding时,LayoutSubscribeFragmentBinding报错

LayoutRecommendFragmentBinding是一个DataBinding类&#xff0c;它由编译器自动生成&#xff0c;用于访问布局文件中的视图。如果你在代码中看到LayoutRecommendFragmentBinding报红&#xff08;提示未解析的引用&#xff09;&#xff0c;可能有以下原因&#xff1a; 1. 检查…

Docker 的数据管理(dockerfile)

Docker 的数据管理&#xff08;dockerfile&#xff09; 管理 Docker 容器中数据数据卷数据卷容器端口映射 容器互联&#xff08;使用centos镜像&#xff09;Docker 镜像的创建1&#xff0e;基于现有镜像创建2&#xff0e;基于本地模板创建3&#xff0e;基于Dockerfile 创建镜像…

Android主流网络请求开源库的对比

目录 一、为什么要用网络请求开源库&#xff1f; 网络请求开源库是一个将网络请求的相关功能封装好的类库 没有网络请求框架之前 App想与服务器进行网络请求交互是一件很痛苦的事&#xff1a;因为Android的主线程不能进行网络请求&#xff0c;需另开1个线程请求、考虑到线程池…

软件工程开发文档写作教程(03)—开发文档的必备条件

本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;电子工业出版社《软件文档写作教程》 马平&#xff0c;黄冬梅编著 必备条件概述 软件系统配备软件文档不仅对于公司非常有益&#xff0c;而且也能够让客户从中…

【Linux】【配置】网络连接

NetworkManager介绍 NetworkManager 是一个在 Linux 系统上管理网络连接的系统服务和工具。它可以自动配置和管理有线、无线、移动宽带和虚拟专用网络 (VPN) 连接&#xff0c;以及其他类型的网络连接。 NetworkManager 提供了一种简单且易于使用的方法来管理网络连接&#xff…

JSP、JSTL标签

<!-- JSTL的表达式的依赖--><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency><!--Standard标签库--><dependency><groupId>java…

QGroundControl之安装调试

QGroundControl之安装调试 1. 源由2. 问题汇总2.1 摄像头播放问题2.2 Windows电脑录像和拍照保存位置2.3 Android设备录像和拍照保存位置 3. 打包资料4. 附录-QGroundControl-Video Streaming5. 附录-QGroundControl效果图6. 参考资料 1. 源由 开源软件的好处就是免费&#xf…

数字政府智慧政务一网通办解决方案2022(ppt可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 建设成效 让政务服务全流程更“好办、智办” 智慧政务“111”架构 服务门户 统一入口、多端同步&#xff0c;一网融合、数据同源 服务门户 智能客服、智能问答、智能外呼实现…

2023一网通办一网统管一码互联一网共治建设方案(PPT可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 智慧城市基础平台的定位 智慧城市各模块的纵向关系 智慧城市-数据中枢整体架构 数据中枢在智慧城市定位 数据中枢定位1、数据中枢是智慧城市基础平台的核心组成部分&#x…

虚拟化技术 — VirtIO 虚拟设备接口标准

目录 文章目录 目录VirtIOVirtIO 虚拟设备接口标准VirtIO 的前后端分层架构标准VirtIO 的数控路径分离架构标准VirtIO 的传输层标准 VirtIO 标准在 Linux 中的实现 VirtIO VirtIO 由 Rusty Russell 开发&#xff0c;最初是为了支持自己开发的 lguest Hypervisor&#xff0c;其…

对象存储之SeaweedFS简介及与MinIO的对比

什么是SeaweedFS&#xff1f; SeaweedFS架构&#xff1a; master service【主服务】和Volume service【卷服务】一起提供分布式对象存储服务&#xff0c;支持用户配置数据的复制和冗余策略。可选的Filer service【过滤器】和S3 service【S3服务】是对象存储之上的附加层&#x…

量子力学 学习

对于同一个竖直向上量子比特&#xff0c;不对他进行任何的干扰&#xff0c;进行第一次水平测试实验会随机得到一个一或者负一&#xff0c;之后再进行多少次水平测试实验都与第一次的试验结果是相同的。 我们换用其他的竖直向上量子比特&#xff0c;或者对原来的量子比特进行干扰…

高阶函数的面试

说说JS原型和原型链 原型&#xff1a;函数都有prototype(显示原型)属性&#xff0c;而prototype会自动初始化一个空对象&#xff0c;这个对象就是原型对象 原型对象中会有一个constructor属性,这个属性将指向了函数本身 实例化对象都有一个_proto_(隐式原型)属性&#xff0c…

Spring基于注解读取和存储对象

目录 一. 存储 Bean 对象 1. 前置工作&#xff1a;配置扫描路径 2. 使用五大类注解存储Bean对象 Controller 命名规则 Service Repository Compoent Configuration 五大类注解之间的关系 3. 使用方法注解存储Bean对象 二. 获取 Bean 对象 1. 属性注入 优点分析 缺…

详解C语言string.h中常用的14个库函数(二)

本篇博客继续讲解string.h中的库函数。在上一篇博客中&#xff0c;我介绍了strlen, strcpy, strcat, strcmp这4个字符串操作函数&#xff0c;本篇博客会继续介绍strncpy, strncat, strncmp这3个类似的函数。 strcpy, strcat, strcmp这3个函数是长度不受限制的字符串操作函数&a…