VUE学习二:事件监听(v-on)、条件判断(v-if/v-else-if/v-else)、循环遍历(v-for)

简介: 这篇文章是关于Vue.js的学习指南,涵盖了事件监听、条件判断、循环遍历、数组方法响应性、案例分析以及高阶函数的使用。

导言

一、v-on指令:01-事件监听

1. 01-v-on的基本使用.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>01-v-on的基本使用</title>
</head>
<body>

<div id="app">
  <h2>{
  {counter}}</h2>
  <!--<h2 v-bind:title></h2>-->
  <!--<h2 :title></h2>-->

  <h1>第一种写法:直接写操作</h1>
  <button v-on:click="counter++">+</button>
  <button v-on:click="counter--;">-</button>

  <h1>第二种写法:方法名</h1>
  <button v-on:click="increment">+</button>
  <button v-on:click="decrement">-</button>

  <h1>第三种写法:语法糖  类似于 v-bind 等价于 :(冒号)</h1>
  <button @click="increment">+</button>
  <button @click="decrement">-</button>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      counter: 0
    },
    methods: {
      // es5 写法
      increment: function() {
        this.counter++
      },
      // es6 增强写法
      decrement: function() {
        this.counter--
      }
    }
  })
</script>

</body>
</html>

在这里插入图片描述

2. 02-v-on的参数问题.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>02-v-on的参数问题</title>
</head>
<body>

<div id="app">
  <h1>1.事件调用的方法没有参数(小括号可有可无)</h1>
  <button @click="btn1Click()">按钮1</button>
  <button @click="btn1Click">按钮1</button><br/>

  <!--2.在事件定义时, 写方法时省略了小括号, 但是方法本身是需要一个参数的,
  这个时候, Vue会默认将浏览器生产的event事件对象作为参数传入到方法-->
  <h1>2.在事件定义时, 写方法时省略了小括号, 但是方法本身是需要一个参数的,这个时候, Vue会默认将浏览器生产的event事件对象作为参数传入到方法</h1>
  <button @click="btn2Click(123)">按钮2-1</button>
  <button @click="btn2Click()">按钮2-2</button>
  <button @click="btn2Click">按钮2-3</button><br>

  <!--3.方法定义时, 我们需要event对象, 同时又需要其他参数-->
  <!-- 在调用方式, 如何手动的获取到浏览器参数的event对象: $event-->
  <h1>3.方法定义时, 我们需要event对象, 同时又需要其他参数, 在调用方式, 如何手动的获取到浏览器参数的event对象: $event</h1>
  <button @click="btn3Click(abc, $event)">按钮3</button>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      abc: 123
    },
    methods: {
      btn1Click() {
        console.log("btn1Click");
      },
      btn2Click(event) {
        console.log('--------', event);
      },
      btn3Click(abc, event) {
        console.log('++++++++', abc, event);
      }
    }
  })

  // 如果函数需要参数,但是没有传入, 那么函数的形参为undefined
  // function abc(name) {
  //   console.log(name);
  // }
  //
  // abc()
</script>

</body>
</html>

在这里插入图片描述

3. 03-v-on的修饰符.html

冒泡事件:外面的事件 触发 内层的事件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-on的修饰符</title>
</head>
<body>

<div id="app">
  <!--冒泡事件:外面的事件 触发 内层的事件-->
  <h1>1. .stop修饰符的使用: 阻止冒泡事件</h1>
  <div @click="divClick">
    aaaaaaa
    <button @click.stop="btnClick">按钮</button>
  </div>

  <h1>2. .prevent 修饰符的使用:阻止默认事件</h1>
  <br>
  <form action="baidu">
    <input type="submit" value="提交" @click.prevent="submitClick">
  </form>

  <h1>3. .监听某个键盘的键帽</h1>
  <!--keyup: 监听所有按键
      enter: 监听 enter 按键的使用-->
  <input type="text" @keyup.enter="keyUp"><br>

  <h1>4. .once修饰符的使用:只让第一次点击有效,以后再点无效</h1>
  <button @click.once="btn2Click">按钮2</button>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    },
    methods: {
      btnClick() {
        console.log("btnClick");
      },
      divClick() {
        console.log("divClick");
      },
      submitClick() {
        console.log('submitClick');
      },
      keyUp() {
        console.log('keyUp');
      },
      btn2Click() {
        console.log('btn2Click');
      }
    }
  })
</script>

</body>
</html>

二、v-if和v-else:02-条件判断

1. 01-v-if的使用.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>01-v-if的使用</title>
</head>
<body>

<div id="app">
  <h2 v-if="isShow">
    <div>abc</div>
    <div>abc</div>
    <div>abc</div>
    <div>abc</div>
    <div>abc</div>
    {
  {message}}
  </h2>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      isShow: true
    }
  })
</script>

</body>
</html>

在这里插入图片描述

2. 02-v-if和v-else的使用.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>02-v-if和v-else的使用</title>
</head>
<body>

<div id="app">
  <h2 v-if="isShow">
    <div>abc</div>
    <div>abc</div>
    <div>abc</div>
    <div>abc</div>
    <div>abc</div>
    {
  {message}}
  </h2>
  <!-- <h1 v-else>isShow为false时, 显示我</h1> -->
  <button v-else @click="isShow = !isShow">isShow为false时, 显示我,点击我就没啦</button>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      isShow: false
    }
  })
</script>

</body>
</html>

在这里插入图片描述

3. 03-v-if和v-else-if和v-else的使用.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03-v-if和v-else-if和v-else的使用</title>
</head>
<body>

<div id="app">
  <h2 v-if="score>=90">优秀</h2>
  <h2 v-else-if="score>=80">良好</h2>
  <h2 v-else-if="score>=60">及格</h2>
  <h2 v-else>不及格</h2>

  <h1>{
  {result}}</h1>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      score: 99
    },
    computed: {
      result() {
        let showMessage = '';
        if (this.score >= 90) {
          showMessage = '优秀'
        } else if (this.score >= 80) {
          showMessage = '良好'
        }
        // ...
        return showMessage
      }
    }
  })
</script>

</body>
</html>

在这里插入图片描述

4. 04-用户登录切换的案例.html

  • 存在的问题:
    如果我们在有输入内容的情况下,切换了类型,我们会发现文字依然显示之前的输入的内容。
    但是按道理讲,我们应该切换到另外一个input元素中了。
    在另一个input元素中,我们并没有输入内容。
    为什么会出现这个问题呢?
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>04-用户登录切换的案例</title>
</head>
<body>

<!--
出现的问题:
如果我们在有输入内容的情况下,切换了类型,我们会发现文字依然显示之前的输入的内容。
但是按道理讲,我们应该切换到另外一个input元素中了。
在另一个input元素中,我们并没有输入内容。
为什么会出现这个问题呢?
-->

<div id="app">
  <span v-if="isUser">
    <label for="username">用户账号</label>
    <input type="text" id="username" placeholder="用户账号">
  </span>
  <span v-else>
    <label for="email">用户邮箱</label>
    <input type="text" id="email" placeholder="用户邮箱">
  </span>
  <button @click="isUser = !isUser">切换类型</button>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      isUser: true
    }
  })
</script>

</body>
</html>

5. 05-用户登录切换的案例(小问题).html(解决上一节问题)

  • 问题解释:
    这是**因为Vue在进行DOM渲染时,出于性能考虑,会尽可能的复用已经存在的元素,而不是重新创建新的元素**。
    在上面的案例中,Vue内部会发现原来的input元素不再使用,直接作为else中的input来使用了。

  • 解决方案:
    如果我们不希望Vue出现类似重复利用的问题,可以给对应的input添加key
    并且我们需要保证key的不同

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>05-用户登录切换的案例(小问题)</title>
</head>
<body>

<!--
问题解释:
这是因为Vue在进行DOM渲染时,出于性能考虑,会尽可能的复用已经存在的元素,而不是重新创建新的元素。
在上面的案例中,Vue内部会发现原来的input元素不再使用,直接作为else中的input来使用了。

解决方案:
如果我们不希望Vue出现类似重复利用的问题,可以给对应的input添加key
并且我们需要保证key的不同
-->

<div id="app">
  <span v-if="isUser">
    <label for="username">用户账号</label>
    <input type="text" id="username" placeholder="用户账号" key="username">
  </span>
  <span v-else>
    <label for="email">用户邮箱</label>
    <input type="text" id="email" placeholder="用户邮箱" key="email">
  </span>
  <button @click="isUser = !isUser">切换类型</button>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      isUser: true
    }
  })
</script>

</body>
</html>

6. 06-v-show的使用.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>06-v-show的使用</title>
</head>
<body>

<div id="app">
  <h1>v-if: 当条件为false时, 包含v-if指令的元素, 根本就不会存在dom中</h1>
  <h2 v-if="isShow" id="aaa">{
  {message}}</h2>

  <h1>v-show: 当条件为false时, v-show只是给我们的元素添加一个行内样式: display: none</h1>
  <h2 v-show="isShow" id="bbb">{
  {message}}</h2>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      isShow: true
    }
  })
</script>

</body>
</html>

在这里插入图片描述

三、03-循环遍历

1. 01-v-for遍历数组.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>01-v-for遍历数组</title>
</head>
<body>

<div id="app">
  <!--1.在遍历的过程中,没有使用索引值(下标值)-->
  <h1>1.在遍历的过程中,没有使用索引值(下标值)</h1>
  <ul>
    <li v-for="item in names">{
  {item}}</li>
  </ul>

  <!--2.在遍历的过程中, 获取索引值-->
  <h2>2.在遍历的过程中, 获取索引值</h2>
  <ul>
    <li v-for="(item, index) in names">
      {
  {index+1}}.{
  {item}}
    </li>
  </ul>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      names: ['why', 'kobe', 'james', 'curry']
    }
  })
</script>

</body>
</html>

在这里插入图片描述

2. 02-v-for遍历对象.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>02-v-for遍历对象</title>
</head>
<body>

<div id="app">

  <!--0.直接点出来属性-->
  <h1>0.直接点出来属性</h1>
  <ul>
    <li >{
  {info.name}}</li>
    <li >{
  {info.age}}</li>
    <li >{
  {info.height}}</li>
  </ul>

  <!--1.在遍历对象的过程中, 如果只是获取一个值, 那么获取到的是value-->
  <h1>1.在遍历对象的过程中, 如果只是获取一个值, 那么获取到的是value</h1>
  <ul>
    <li v-for="item in info">{
  {item}}</li>
  </ul>


  <!--2.获取key和value 格式: (value, key) -->
  <h1>2.获取key和value 格式: (value, key)</h1>
  <ul>
    <li v-for="(value, key) in info">{
  {value}}-{
  {key}}</li>
  </ul>


  <!--3.获取key和value和index 格式: (value, key, index) -->
  <h1>3.获取key和value和index 格式: (value, key, index)</h1>
  <ul>
    <li v-for="(value, key, index) in info">{
  {value}}-{
  {key}}-{
  {index}}</li>
  </ul>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      info: {
        name: 'feng',
        age: 18,
        height: 1.88
      }
    }
  })
</script>

</body>
</html>

在这里插入图片描述

3. 03-v-for使用过程添加key.html

input 表单中也可以加key,是为了怕复用
也是二.4和二.5的问题

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03-v-for使用过程添加key</title>
</head>
<body>

<!-- input 表单中也可以加key,是为了怕复用-->

<div id="app">
  <ul>
    <li v-for="item in letters" :key="item">{
  {item}}</li>
  </ul>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      letters: ['A', 'B', 'C', 'D', 'E']
    }
  })
</script>

</body>
</html>

4. 04-哪些数组的方法是响应式的.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>04-哪些数组的方法是响应式的</title>
</head>
<body>

<div id="app">
  <ul>
    <li v-for="item in letters">{
  {item}}</li>
  </ul>
  <button @click="btnClick">按钮</button>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      letters: ['a', 'b', 'c', 'd']
    },
    methods: {
      btnClick() {
        /*
        * push(), pop(), shift(), unshift(), splic(), sort(), reverse()
        * 以上都是响应式的 方法
        * Vue是响应式的,所以当数据发生变化时,Vue会自动检测数据变化,视图会发生对应的更新。
        * Vue中包含了一组观察数组编译的方法,使用它们改变数组也会触发视图的更新。
        * */
        /*
        * 1.push方法
        * */
        // this.letters.push('aaa')
        // this.letters.push('aaaa', 'bbbb', 'cccc')

        /*
        * 2.pop(): 删除数组中的最后一个元素
        * */
        // this.letters.pop();

        /*
        * 3.shift(): 删除数组中的第一个元素
        * */
        // this.letters.shift();

        /*
        * 4.unshift(): 在数组最前面添加元素
        * */
        // this.letters.unshift()
        // this.letters.unshift('aaa', 'bbb', 'ccc')

        /*
        * 5.splice作用: 删除元素/插入元素/替换元素
        *
        * 删除元素: 第二个参数传入你要删除几个元素(如果没有传,就删除后面所有的元素)
        * splice(1, num) 从第 1 个开始,删除num个数
        * splice(1)      删除 第1个以后的所有元素
        * 替换元素: 第二个参数, 表示我们要替换几个元素, 后面是用于替换前面的元素
        * splice(start, num, 。。。):从第start个开始,后面的 num 个元素,都被后面的参数都代替
        * 插入元素: 第二个参数, 传入0, 并且后面跟上要插入的元素
        * */
        // splice(start): // 删除
        this.letters.splice(1, 3, 'm', 'n', 'l', 'x')  // 替换
        // this.letters.splice(1, 0, 'x', 'y', 'z') // 添加

        /*
        * 5.sort()
        * */
        // this.letters.sort()

        /*
        * 6.reverse()
        * */
        // this.letters.reverse()

        // 注意: 通过索引值修改数组中的元素
        // this.letters[0] = 'bbbbbb';
        // this.letters.splice(0, 1, 'bbbbbb')
        // set(要修改的对象, 索引值, 修改后的值)
        // Vue.set(this.letters, 0, 'bbbbbb')
      }
    }
  })

  /*
  * ...num:可变参数,数组类型
  * */
  function sum(...num) {
    console.log(num);
  }

  sum(20, 30, 40, 50, 601, 111, 122, 33)

</script>

</body>
</html>

5. 05-作业的回顾和完成.html(同上一章:三.4)

点谁,谁变红。
和上一章中的三.4是一样的

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>05-作业的回顾和完成</title>
  <style>
    .active {
      color: red;
    }
  </style>
</head>
<body>

<div id="app">
  <ul>
    <li v-for="(item, index) in movies"
        :class="{active: currentIndex === index}"
        @click="liClick(index)">
      {
  {index}}.{
  {item}}
    </li>

    <!--<li :class="{active: 0===currentIndex}"></li>-->
    <!--<li :class="{active: 1===currentIndex}"></li>-->
    <!--<li :class="{active: 2===currentIndex}"></li>-->
    <!--<li :class="{active: 3===currentIndex}"></li>-->
  </ul>
</div>

<script src="../../lib/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      movies: ['海王', '海贼王', '加勒比海盗', '海尔兄弟'],
      currentIndex: 0
    },
    methods: {
      liClick(index) {
        this.currentIndex = index
      }
    }
  })
</script>

</body>
</html>

在这里插入图片描述

四、04-书籍购物车案例

1. index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>书籍购物车案例</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
<div id="app">
  <div v-if="books.length">
    <table>
      <thead>
      <tr>
        <th></th>
        <th>书籍名称</th>
        <th>出版日期</th>
        <th>价格</th>
        <th>购买数量</th>
        <th>操作</th>
      </tr>
      </thead>
      <tbody>
      <tr v-for="(item, index) in books">
        <td>{
  {item.id}}</td>
        <td>{
  {item.name}}</td>
        <td>{
  {item.date}}</td>
        <td>{
  {item.price | showPrice}}</td>
        <td>
          <button @click="decrement(index)" :disabled="item.count <= 1" >-</button>
          {
  {item.count}}
          <button @click="increment(index)">+</button>
        </td>
        <td><button @click="removeHandle(index)">移除</button></td>
      </tr>
      </tbody>
    </table>
    <h2>总价格: {
  {totalPrice | showPrice}}</h2>
  </div>
  <h2 v-else>购物车为空</h2>
</div>

<script src="../../lib/vue.js"></script>
<script src="main.js"></script>
</body>
</html>

2. main.js

const app = new Vue({
  el: '#app',
  data: {
    books: [
      {
        id: 1,
        name: '《算法导论》',
        date: '2006-9',
        price: 85.00,
        count: 1
      },
      {
        id: 2,
        name: '《UNIX编程艺术》',
        date: '2006-2',
        price: 59.00,
        count: 1
      },
      {
        id: 3,
        name: '《编程珠玑》',
        date: '2008-10',
        price: 39.00,
        count: 1
      },
      {
        id: 4,
        name: '《代码大全》',
        date: '2006-3',
        price: 128.00,
        count: 1
      },
    ]
  },
  computed: {
    totalPrice() {
      let totalPrice = 0
      for (let i = 0; i < this.books.length; i++) {
        totalPrice += this.books[i].price * this.books[i].count
      }
      return totalPrice

      // for (let i in/of this.books)
      // reduce
    }
  },
  methods: {
    decrement: function (index) {
      this.books[index].count--;
    },
    increment(index) {
      this.books[index].count++;
    },
    removeHandle(index) {
      this.books.splice(index, 1)
    }
  },
  filters: {
    showPrice(price) {
      return '¥' + price.toFixed(2)
    }
  }
})

3. style.css

table {
  border: 1px solid #e9e9e9;
  border-collapse: collapse;
  border-spacing: 0;
}

th, td {
  padding: 8px 16px;
  border: 1px solid #e9e9e9;
  text-align: left;
}

th {
  background-color: #f7f7f7;
  color: #5c6b77;
  font-weight: 600;
}

五、高阶函数.js

// filter / map/ reduce
const nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]

let n =nums.filter(function (n) {
  return n < 100;
}).map(function (n) {
  return n*2;
}).reduce(function (preValue, n) {
  return preValue+n;
});
console.log(n);
let m = nums.filter(n=>n<100).map(n=>n*2).reduce((preValue, n)=>preValue+n);
console.log(m);

/*
* 需求1:取出所有小于100的数组
* */
// 解决方法1
let newNums = []
for (let i of nums){
  if (i<100){
    newNums.push(i)
  }
}
console.log(newNums);

// 解决方法2
let newNums1 = nums.filter(function (n) {
return n<100;
})
console.log(newNums1);

/*
* 需求2:将所有小于100的数字进行转化:全部 * 2
* */
let new2Nums = []
for (let i of newNums){
  new2Nums.push(i*2)
}
console.log(new2Nums);

let new2Nums1 = newNums.map(function (n) {
  return n*2;
})
console.log(new2Nums1);

/*
* 需求3:将所有的 new2nums 数字相加,得到最终的结果
* */
let total=0
for (let n of new2Nums){
  total+=n
}
console.log(total);

let total1 = new2Nums.reduce(function (preValue, book) {
  return preValue+ book
}, 0)
console.log(total1);
相关文章
|
1天前
|
编解码 Java 程序员
写代码还有专业的编程显示器?
写代码已经十个年头了, 一直都是习惯直接用一台Mac电脑写代码 偶尔接一个显示器, 但是可能因为公司配的显示器不怎么样, 还要接转接头 搞得桌面杂乱无章,分辨率也低,感觉屏幕还是Mac自带的看着舒服
|
3天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1540 5
|
1月前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
7天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
577 22
|
3天前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
201 3
|
10天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
10天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
571 5
|
23天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
6天前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
233 3
|
9天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
327 2