webgis开发之vue(1)

本文详细介绍了Vue.js的基本概念,包括其数据驱动视图的特点、v-model双向绑定、模板语法、生命周期钩子以及常用的事件处理。通过实例展示了如何在项目中运用这些核心特性来构建单页面应用。
摘要由CSDN通过智能技术生成

VUE

Vue.js 是一种流行的 JavaScript 前端框架,用于构建交互式的单页面 Web 应用程序 (SPA)。它由尤雨溪创建,并由一个开源社区维护和支持。Vue.js 专注于实现数据驱动的视图层,它提供了一种简洁、灵活的方式来组织和管理前端应用程序的界面。

01、vue介绍

<!-- App.vue 是根组件 -->
<!-- 结构层 -->
<!-- template下面只能由一个子节点 -->
<template>
    <div id="app">
      <!-- 使用数据的方法 {{ }} -->  
      <!-- 点击事件使用@click   -->
      <!-- 如果传参(1) 不传参就不加() -->
      <h1 @click="toAdd">{{count}}</h1>
    </div>
  </template>
  
  <!-- 逻辑层 -->
  <script>
  export default{
    // data是vue2用来数据管理的地方
    // 一旦变量放进data里面 vue就能对data进行监听 msg怎么变vue都能知道
    data(){
      return{
        count:0 // 2、是响应式数据(数据驱动视图),数据变了视图也会变
      };
    },
    // 方法放这里面
    methods:{
      // 1、没有dom元素操作
      toAdd(){
        this.count++  //在方法中使用data中数据需要加一个this
      }
    }
  }
  </script>
  
  <!-- 样式层 -->
  <style scoped></style>
  

02、vue事件

<template>
    <div>
      <p v-if="isShow">hello</p>
      <p v-else>vue</p>
      <button @click="toChange">切换</button>
  
      <!-- 0  显示 零分 -->
      <!-- 1  显示 半分 -->
      <!-- 2  显示 满分 -->
      <p v-if="value == 0">零分</p>
      <p v-else-if="value == 1">半分</p>
      <p v-else>满分</p>
      <!-- <button @click="toChange">切换</button></div> -->
    </div>
  </template>
  <script>
  export default {
    data() {
      return {
        isShow: true,
        value: 0
      };
    },
    methods: {
      toChange() {
        this.isShow = !this.isShow
      }
    }
  }
  </script>
  <style></style>

03、v-if、v-show 

<template>
    <div>
      <p v-if="isShow">hello</p>
      <p v-else>vue</p>
      <button @click="toChange">切换</button>
  
      <!-- 0  显示 零分 -->
      <!-- 1  显示 半分 -->
      <!-- 2  显示 满分 -->
      <p v-if="value == 0">零分</p>
      <p v-else-if="value == 1">半分</p>
      <p v-else>满分</p>
      <!-- <button @click="toChange">切换</button></div> -->
  
      <!-- v-if v-show的区别 v-if之间删除了dom元素 v-show只是让元素的display: none; -->
      <!-- v-show 适合元素切换频繁的场景 -->
      <p v-show="isShow">hello</p>
    </div>
  </template>
  <script>
  export default {
    data() {
      return {
        isShow: true,
        value: 0
      };
    },
    methods: {
      toChange() {
        this.isShow = !this.isShow
      }
    }
  }
  </script>
  <style></style>

04、v-for动态属性 

<!-- 结构层 -->
<template>
    <div>
      <!-- 给标签属性一个变量的话 前面加一个: -->
      <!-- <span v-for="(item, index) in list" :key="index">
        <a :href=item.url>{{ item.title }}</a><br>
      </span> -->
  
      <div v-for="(item, index) in arr" :key="index">
        {{ item.title }}
        <img :src=item.url alt="">
      </div>
    </div>
  </template>
  <!-- 逻辑层 -->
  <script>
  export default {
    data() {
      return {
        arr:
          [
            {
              title: "vue",
              url: "https://p1.music.126.net/S607Z3GzyOrtGELZh377Mw==/109951166575494657.jpg?imageView&quality=89",
            },
            {
              title: "react",
              url: "https://p1.music.126.net/wrs0csPtv86AXooTem3aPw==/109951166575508031.jpg?imageView&quality=89",
            },
            {
              title: "angular",
              url: "https://p1.music.126.net/Lp7cNHJo8urAGw-aZ_TqFA==/109951166575499997.jpg?imageView&quality=89",
            },
          ]
      };
    },
    methods: {
      toChange() {
        this.isShow = !this.isShow
      }
    }
  }
  </script>
  <!-- 样式层 -->
  <style></style>

05、双向绑定 

<!-- 结构层 -->
<template>
    <div>
      <!-- v-model 双向绑定 数据与视图的绑定是双向的 -->
      <!-- 数据影响输入框视图的同时,输入框视图也能影响数据   输入框视图即输入框中的数据-->
      <input type="text" v-model="msg" @keyup.enter="handler">
      <button @click="toLog">查看</button>
      <div v-for="(item,index) in arr" :key="index">
        {{ item }}
        <button @click="toDel(index)">删除</button>
      </div>
    </div>
  </template>
  <!-- 逻辑层 -->
  <script>
  export default {
    data() {
      return {
        msg:'',  //响应式数据(数据驱动视图),视图变了,响应不会变
        arr:[]
      };
    },
    methods: {
      toLog() {
        console.log(this.msg)
      },
      handler(){
        if(this.msg){
          this.arr.push(this.msg)
        }else{
          alert('不能为空!')
          return
        }
      },
      toDel(index){
        this.arr.splice(index,1)
        console.log(index)
      }
    }
  }
  </script>
  <!-- 样式层 -->
  <style></style>

06、v-model原理 

<!-- 结构层 -->
<template>
    <div>
      <input type="text" :value="msg" @input="inputChange($event)">
      <h1 v-for="(item,index) in arr" :key="index" @click="handleItem(index,$event)">{{ item }}</h1>
  
      
    </div>
  </template>
  <!-- 逻辑层 -->
  <script>
  export default {
    data() {
      return {
        msg:'',
        arr:["eating","sleeping","playing"]
      };
    },
    methods: {
      // 双向绑定的原理   在输入框改变的同时   给msg赋值
      inputChange(event){
        this.msg = event.target.value
        console.log(this.msg)
      },
      handleItem(index,event){
        console.log(event)
      }
    }
  }
  </script>
  <!-- 样式层 -->
  <style></style>

07、生命周期 

<!-- 结构层 -->
<template>
  <div>
    <!-- 组件挂载 -->
    <!-- <div v-for="(item,index) in programs" :key="index">
        <img :src=item.coverUrl alt="" 
        style="display: block;float: left;width: 50px;height: 50px;">
        <p style="display: block;float: left;">{{ item.name }}</p><br><br><br>
      </div> -->

    <!-- 组件更新 -->
    <h1 @click="count++">{{ count }}</h1>
  </div>
</template>
  <!-- 逻辑层 -->
  <script>
export default {
  data() {
    return {
      count: 0,
      programs: [],
    };
  },
  methods: {
    initData() {
      fetch("http://39.103.151.139:3000/program/recommend")
        .then((res) => res.json())
        .then((data) => {
          // 更新数据
          this.programs = data.programs;
          console.log(this.programs);
        })
        .catch((error) => {
          console.error("Error fetching data", error);
        });
    },
  },
  beforeCreate() {
    console.log("组件创建之前");
  },
  created() {
    console.log("组件创建完成");
  },
  beforeMount() {
    console.log("组件挂载之前");
  },
  // 一般在这个生命周期中完成页面数据的初始化
  // 在这个生命周期中想后端要初始化的数据
  mounted() {
    this.initData();
    console.log("组件挂载完成");
  },
  // 组件更新之前
  beforeUpdate() {
    console.log("组件更新之前");
  },
  // 组件更新之后
  updated() {
    console.log("组件更新之后");
  },
};
</script>
  <!-- 样式层 -->
  <style></style>

WebGIS是基于Web技术的地图信息系统,可以在浏览器中实现地图浏览、地图查询、地图分析等功能。本教程将介绍如何使用Vue框架开发一个WebGIS应用。 以下是实现WebGIS应用的基本步骤: 1. 确定应用需求 首先需要明确应用的需求,包括地图类型、地图数据、地图操作等。比如,我们可以选择使用百度地图作为底图,加载一些地图数据,实现地图缩放、地图拖拽、地图标注等基本功能。 2. 安装Vue CLI Vue CLI是Vue官方提供的脚手架工具,可以快速创建Vue项目。安装步骤如下: ``` npm install -g @vue/cli ``` 3. 创建Vue项目 使用Vue CLI创建一个新项目,执行以下命令: ``` vue create webgis ``` 创建成功后,进入项目目录: ``` cd webgis ``` 运行项目: ``` npm run serve ``` 在浏览器中访问http://localhost:8080,可以看到Vue的欢迎页面。 4. 集成百度地图 在/src目录下创建一个Map.vue组件,用于显示地图。在该组件中,引入百度地图API,并在mounted钩子函数中初始化地图。 ``` <template> <div id="map"></div> </template> <script> export default { mounted() { const map = new BMap.Map("map"); const point = new BMap.Point(116.404, 39.915); map.centerAndZoom(point, 15); }, }; </script> <style> #map { height: 100%; width: 100%; } </style> ``` 可以看到,Map.vue组件中只有一个div元素,该元素的id为map,用于显示地图。在mounted钩子函数中,创建了一个新的BMap.Map对象,并将其初始化到指定的坐标点。BMap是百度地图API的命名空间,需要在index.html中引入。 ``` <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>webgis</title> <script src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> </head> <body> <div id="app"></div> <!-- built files will be auto injected --> </body> </html> ``` 注意:需要将上述代码中的密钥替换为你自己的百度地图密钥。 5. 加载地图数据 在Map.vue组件中,可以通过BMap API加载地图数据,包括地图标注、地图覆盖物等。例如,可以使用BMap.Marker类添加一个标注。 ``` <template> <div id="map"></div> </template> <script> export default { mounted() { const map = new BMap.Map("map"); const point = new BMap.Point(116.404, 39.915); map.centerAndZoom(point, 15); const marker = new BMap.Marker(point); map.addOverlay(marker); }, }; </script> <style> #map { height: 100%; width: 100%; } </style> ``` 6. 实现地图操作 在Map.vue组件中,可以通过BMap API实现地图操作,包括地图缩放、地图拖拽、地图事件等。例如,可以使用BMap.Map类的方法实现地图缩放。 ``` <template> <div id="map"></div> </template> <script> export default { mounted() { const map = new BMap.Map("map"); const point = new BMap.Point(116.404, 39.915); map.centerAndZoom(point, 15); const marker = new BMap.Marker(point); map.addOverlay(marker); map.enableScrollWheelZoom(); }, }; </script> <style> #map { height: 100%; width: 100%; } </style> ``` 在上述代码中,使用BMap.Map类的enableScrollWheelZoom方法启用地图缩放功能。 7. 实现其他功能 除了基本的地图浏览、地图查询和地图分析功能外,WebGIS应用还可以实现其他功能,比如地图搜索、地图导航等。这些功能可以通过调用BMap API中提供的方法来实现。 以上就是基于Vue开发WebGIS应用的基本步骤。需要注意的是,WebGIS应用的开发需要掌握一定的地理信息知识和前端技术知识,同时还需要熟悉常用的地图API和GIS开发框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值