uniapp desde la entrada hasta el entierro - actualización diaria

introducción uniapp

preparación del entorno

1. Instale el entorno node.js

Proceso de instalación: instale node.js en una letra de unidad que no sea la unidad C

inserte la descripción de la imagen aquí

Una vez completada la instalación, compruebe si el entorno de nodejs es normal.
Ingrese en la ventana cmd:

node -v
npm -v

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Configure el directorio de caché y el directorio de instalación global de nodejs
Cree un directorio llamado nodeConfig en una letra de unidad que no sea la unidad c, cree los directorios node_cache y node_global en el directorio
y luego ejecute el comando, ejecute la ventana cmd con privilegios de administrador

npm config set prefix "E:\nodeConfig\node_global"
npm config set cache "E:\nodeConfig\node_cache"

2. Instalar espejo Taobao

Entorno de Taobao: herramienta cnpm, npm descarga recursos de almacenes espejo en el extranjero, cnpm descarga recursos del sitio de recursos espejo Taobao de Ali, y la velocidad será rápida

npm install -g cnpm 
// 如果速度慢 ,就切换资源站点
npm install -g cnpm --registry=https://registry.npm.taobao.org

Configure la ruta (ruta node_global) descargada por cnpm a la ruta de la variable de entorno

inserte la descripción de la imagen aquí

Use la ventana cmd para probar si la configuración de cnpm es normal

inserte la descripción de la imagen aquí

3. Descarga HX-idea

  1. Registrar cuenta HX
  2. Configure los componentes relacionados con HX (HTML, CSS, JS, Vue, Styule, less, piutter; incorporado: vue2.0, consola incorporada, simulación de máquina real) El siguiente es el contenido que se instalará para los componentes externos
    :
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí
    inserte la descripción de la imagen aquí

Construir el proyecto uniapp

crear proyecto

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

ejecutar proyecto

1. Ejecute el proyecto usando un navegador

inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Abra las herramientas de desarrollo del navegador y cambie al modo de depuración

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Fuera de servicio

inserte la descripción de la imagen aquí

2. Use la herramienta del subprograma WeChat para ejecutar el proyecto

1. Descargue la herramienta de desarrollo del programa WeChat Mini

Dirección de descarga:
dirección de descarga de la herramienta de desarrollo del subprograma WeChat, haga clic para ingresar

inserte la descripción de la imagen aquí

2. Atención a la instalación, instale en una letra de unidad que no sea la unidad C

inserte la descripción de la imagen aquí

3. Configurar las herramientas de desarrollo de WeChat

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

4. Configure la asociación entre HX y las herramientas de desarrollo de WeChat

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

5. Una introducción concisa a la interfaz de la herramienta para desarrolladores

inserte la descripción de la imagen aquí

6. Vinculación de cuenta y proyecto de WeChat Mini Program

Propósito: realizar la liberación rápida de código a la plataforma pública de WeChat

  1. Inicie sesión en la plataforma pública de WeChat, copie el ID de la aplicación (ID del applet de WeChat, único)

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Después de que se complete la copia y el pegado, vuelva a ejecutar el simulador de applet

inserte la descripción de la imagen aquí

7. Sube a la plataforma pública de WeChat para lanzar la versión beta

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Ingrese a la plataforma pública de WeChat para ver la versión de prueba

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

8. Utilice las herramientas de desarrollo de WeChat para la depuración de dispositivos reales

inserte la descripción de la imagen aquí

explicación del directorio del marco del proyecto uni-app

Incluye los siguientes directorios:

|--pages 业务页面文件存放目录(开发使用)
|--|-- index 业务包名
|--|--|-- index.vue 页面(vue文件)
|--static 静态资源目录(图片、视频、文件、安装包...)
|--unpackage 项目打包目录(编译后该目录就会生成,开发时不去修改)
|--|--dist 打包完成的文件夹(之后编译之后才会生成)
|--App.vue 实例页面,应用生命周期函数
|--main.js 入口文件,完成相关app的配置
|--manifest.json 配置应用名称、图标、小程序信息配置文件
|--pages.json 配置路由、导航条信息
|--uni.scss uni-app通用css样式配置文件

1. Composición y método de escritura del archivo del componente Uniapp-page

Ejemplo: crear una página de inicio de sesión

inserte la descripción de la imagen aquí

Composición de la página

<!-- HTML页面 - 可视化部分-->
<template>
	<!-- 所有的html代码都要卸载view标签中 -->
	<view>
		<div>
			<!-- 点击span标签弹出框体 -->
			<span @click="cxk" >哎哟你干嘛!{
   
   { userName }}</span>
		</div>
	</view>
</template>

<!-- vue组件脚本部分 js vue -->
<script>
	export default {
      
      
		data() {
      
       // vue数据双向绑定
			return {
      
      
				userName:"马保国"
			}
		},
		methods: {
      
       // js函数????点击触发什么事情
			cxk(){
      
      
				alert("!!!!!!");
			}
		}
	}
</script>

<!-- 组件样式部分 -->
<style>

span{
      
      
	color:red;
}

</style>

2. Enrutamiento de configuración del archivo Pages.json

Por ejemplo: después de configurar el enrutamiento del archivo recién creado, puede acceder a la página a través de la dirección del navegador

inserte la descripción de la imagen aquí
Explicación del contenido del archivo Pages.json:


{
    
    
	"pages": [ //pages数组中第一项表示应用启动页
		{
    
    
			"path": "pages/index/index",
			"style": {
    
    
				"navigationBarTitleText": "uni-app"
			}
		}
	    ,{
    
    
            "path" : "pages/common/login", // 路由访问的地址(浏览器可以通过该地址访问页面)
            "style" :                                                                                    
            {
    
    
                "navigationBarTitleText": "测试页面", // 导航条显示的文字
                "enablePullDownRefresh": false // 关闭下拉刷新功能
            }
            
        }
    ],
	"globalStyle": {
    
     // uni-app的通用样式- 设置导航条的样式
		"navigationBarTextStyle": "black", // 导航条文字的颜色
		"navigationBarTitleText": "体职院-21电子2班-案例", // 导航条文字 
		"navigationBarBackgroundColor": "#F8F8F8", // 导航条背景颜色
		"backgroundColor": "#F8F8F8" // 整个app的背景颜色
	},
	"uniIdRouter": {
    
    }
}

inserte la descripción de la imagen aquí

Inicio rápido basado en cero HTML, CSS, JS

1. HTML en una aplicación

El contenido HTML se divide en varios fragmentos:

  1. Texto (texto normal, texto de párrafo, etiquetas de encabezado, hipervínculos)
  2. Imagen (etiqueta de imagen)
  3. Vídeo (etiqueta de vídeo)
  4. Formularios (entrada de texto, selección desplegable, selección de radio, selección de cheques, selección de archivos)
  5. cuadro (ver etiqueta)

Nota : el desarrollo de HTML consiste en organizar y utilizar etiquetas y contenido para lograr el efecto del diseño básico de una página web.
Cada línea de código solo puede escribir un conjunto de etiquetas, y las etiquetas se pueden anidar, pero preste atención a las reglas de anidamiento, todo el contenido, incluido el texto, debe anidarse con etiquetas.

Las etiquetas HTML se dividen en elementos a nivel de bloque y elementos en línea

  1. Elemento a nivel de bloque: el contenido del elemento ocupa automáticamente una línea y no se puede mostrar en la misma línea que otras etiquetas de elementos a nivel de bloque o etiquetas de elementos en línea
  2. Elemento en línea: solo el ancho y el alto de su propio elemento de contenido se pueden mostrar en la misma línea que otros elementos en línea

Elementos a nivel de bloque:

<p>段落文本标签</p>
<h1>标题标签</h1>
<center>元素居中标签</center>

Elementos en línea:

<text>普通文本</text>
<a>超链接\锚点</a>
<b>文字加粗</b>
<i>文字倾斜</i>

1.1 caracteres

1.1.1 Texto normal

Escritura de la etiqueta:

<text>文字内容(内部只能写文字不能嵌套别的标签)</text>

Función: un texto simple se puede describir en una página web

caso:

<!-- 组件页面(眼睛看见的部分-HTML) -->
<template>
	<!-- 都要卸载view标签中才能显示 -->
	<!-- 大家好!我叫蔡徐坤!今年45岁 -->
	<view>
		<text>大家好!</text>
		<text>我叫ikun!</text>
		<text>今年45岁</text>
	</view>
</template>

inserte la descripción de la imagen aquí

1.1.2 Texto del párrafo

Escritura de la etiqueta:

<p>一段文本(可以嵌套如text标签)</p>

Función: puede describir un párrafo de texto largo, y el párrafo y otro contenido no se pueden mostrar en la misma línea

caso:

<template>
	<!-- 都要卸载view标签中才能显示 -->
	<!-- 大家好!我叫蔡徐坤!今年45岁 -->
	<view>
		<p>大家好!我是练习时长两年半XXX</p>
		<p>我会CTRL</p>
		<!-- p标签和text标签同时出现 -->
		<p>大家好!我是练习时长两年半XXX</p>
		<text>jijijijiji</text>
		<!-- p标签包含text标签 -->
		<p>okok你可真的好厉害!
			<text>hahahah</text>
		</p>
	</view>
</template>

inserte la descripción de la imagen aquí

1.1.3 Etiquetas de título

Escritura de la etiqueta:

<h1>文字内容(可以嵌套:text)</h1>

Función: describe un título de texto grande, el texto está en negrita y ampliado

caso:

<template>
	<!-- 都要卸载view标签中才能显示 -->
	<!-- 大家好!我叫蔡徐坤!今年45岁 -->
	<view>
		<!-- 标题标签只有6个从h1~h6 数字越小文字越大 -->
		<h1>马保国-h1</h1>
		<h2>马保国-h2</h2>
		<h3>马保国-h3</h3>
		<h4>马保国-h4</h4>
		<h5>马保国-h5</h5>
		<h6>马保国-h6</h6>
	</view>
</template>

inserte la descripción de la imagen aquí

1.1.4 Hipervínculos

Escritura de la etiqueta:

<!-- 一般不要嵌套别的内容,后面可以学习嵌套图片实现图片超链接 -->
<a href="超链接的地址">超链接文字</a>

Hipervínculo: haga clic en el texto para saltar a otras páginas web

caso:

<template>
	<!-- 都要卸载view标签中才能显示 -->
	<!-- 大家好!我叫蔡徐坤!今年45岁 -->
	<view>
		<a href="https://www.baidu.com">去百度</a>
	</view>
</template>

Enlace ancla
La pantalla es larga y la pantalla se desplaza, haga clic para volver a la parte superior y saltar directamente a la posición superior

<!-- 锚点 -->
		<a name="topnav">顶部锚点</a>
<!-- 锚链接 : 点击锚链接可以回到锚点所在的位置 -->
		<a href="#topnav">回到顶部</a>

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

1.1.5 Otras etiquetas complementarias

<!-- 加粗 -->
		<b>文字</b>
		<text>文字</text>
		<!-- 快速文字内容水平居中 -->
		<center>
			<text>居中文字</text>
		</center>
		<!-- 文字倾斜标签 -->
		<i>文字2</i>

1.2 Fotos

mostrar imagen

1.1.1 atributo src

Función: señalar la dirección de una imagen para cargar la imagen

1. Use la dirección en línea para cargar

<!-- 1. 使用在线图片地址加载图片 -->
<image src="https://tse3-mm.cn.bing.net/th/id/OIP-C.TH0deMslA_zRpkYFZxJ-GgAAAA?pid=ImgDet&rs=1" />

2. Carga de dirección local - carga de ruta relativa

<!-- 3.相对路径访问地址 -->
		<image src="../../static/xhz2.png" />

1.1.2 atributo de etiqueta de título

Ratón o presione prolongadamente un mensaje de texto

<img title="你干嘛!"  src="../../static/xhz2.png" />

1.3 vídeo

Introducción de atributos:
src:
controles de dirección de video: barra de operación de video
reproducción automática: reproducción automática
silenciada: silenciar
bucle: reproducción en bucle

<video controls autoplay muted loop src="../../static/v1.mp4"></video>

1.4 Formularios

<!-- 单行文本输入款 -->
		<input type="text" placeholder="输入提示文字..."/>
		<!-- 密码框 -->
		<input type="password" placeholder="请输入密码..." />
		<!-- 单选框 -->
		<radio-group name="sex">
			<radio  value="1" /><radio  value="2" /></radio-group>
		<!-- 复选框 -->
		<checkbox-group name="likes">
			<checkbox value="1" />吃鸡
			<checkbox value="2" />csgo
			<checkbox value="3" />lol
		</checkbox-group>
		<!-- 多行文本输入框 -->
		<textarea placeholder="请输入自我介绍..."></textarea>
		<!-- 下拉框 -->
		<select>
			<option value="1">昆明</option>
			<option value="2">蒙自</option>
			<option value="3">迪庆</option>
		</select>
		
		<!-- 按钮 -->
		<button type="warn" >警告按钮</button>
		<button  >默认按钮</button>
		<button type="primary" >重要提示按钮</button>

inserte la descripción de la imagen aquí

2. Inicio rápido de css en uniapp

Qué aprender:

  1. selector (clase, etiqueta, id, niño, hermano, vecino)
  2. hoja de estilo:
    1. Estilo de texto (fuente, tamaño, peso, divisor, color, sombra)
    2. Fondos de imagen (imagen de fondo, patrón de mosaico, repetición, relleno)
    3. Modelo de caja (margen, relleno, borde, alto, ancho)
  3. Método de diseño de página web:
    1. diseño flotante
    2. diseño flexible
  4. Posicionamiento de elementos (posicionamiento absoluto, relativo, fijo, pegajoso)
  5. Animaciones (propiedades de elementos de transición, animaciones de fotogramas clave)

2.1 Selector

Seleccione elementos o etiquetas en la página web para modificar el estilo.

2.1.1 Cómo importar estilos:

  1. Ejemplo de estilo en línea
    :
<div>
<!-- 行内样式作用的是style属性所在的标签以及子标签 -->
	<span style="color:red;">哎哟你干嘛!{
   
   { userName }}</span>
	<span>123</span>
</div>
  1. Ejemplo de estilo interior
    :
<!-- 内部样式写在style标签中-->
<style>
	
	/* 使用内部样式时就要使用元素选择器选择要修改样式的标签  */
	span{
      
      
		color:green;
	}

	
</style>

  1. Estilo externo:
    escribe el código css en un archivo con el sufijo .css, e introduce el componente importando
    Case:
/*mytest.css文件*/

span{
    
    
   color:red;
}

Importar en componente:

<!-- 内部样式写在style标签中-->
<style>
	
	/*  在组件页面的style标签中导入css文件 */
	@import url('../../static/mytest.css');
	
	
</style>

2.1.2 Selector de etiquetas

Función: seleccione un grupo de objetos de etiqueta con el mismo nombre en la página para modificar el estilo

caso:

/* 修改页面中所有的h1标签 */
h1{
    
    
   color:red;
}

/* 改变一组标签的写法 */
h2,h3,h4{
    
    
   color:green;
}

2.1.3 Selector de clase (uso común)

Método de escritura: use el atributo de clase para nombrar y marcar una clase de etiquetas en la etiqueta html, y modifique el estilo css a través de la selección del nombre del atributo de clase

caso:

<span class="demo">文字1</span>
<span>文字2</span>
<span class="demo">文字3</span>

<!-- 一个标签可以拥有多种样式 -->
<span class="demo demo2">文字4</span>
.demo{
    
    
    color:red;
}

.demo2{
    
    
	font-size:18px;
}

2.1.4 Selector de ID

Descripción de id: asegúrese de que en la misma página, el valor del atributo id no se pueda repetir.
El método de escritura es similar al de la clase

caso:

<span id="ft1">文字1</span>
<span>文字2</span>
<span id="ft2">文字3</span>
<!-- id属性只能有一个唯一值,不能用空格分隔编写多个id -->
/* 只修改id为ft1的样式 */
#ft1{
    
    
	color:red;
}

2.1.5 Selector de elementos secundarios

Al escribir html, las etiquetas se pueden anidar. En este momento, el método de configuración del estilo se puede modificar seleccionando la etiqueta secundaria a través de la etiqueta principal, pero tenga en cuenta que el selector de elementos secundarios solo puede seleccionar el elemento "hijo" y el implementación de las necesidades del "elemento nieto" Implementado usando selectores de elementos descendientes

caso:

<div class="demo">
      <span>儿子</span>
      <div>
      	  <span>孙子</span>
   	   </div>
</div>
.demo>span{
    
    
   color:red;
}

2.1.6 Selectores de elementos descendientes

La llamada descendencia significa que no importa cuántos niveles haya en la jerarquía de subelementos, siempre que se modifique el subelemento

caso:

<div class="demo">
		      <span>儿子</span>
		      <div>
		      	  <span>孙子</span>
		   	   </div>
		</div>
.demo span{
    
    
	   color:red;
	}

2.1.7 Selectores de hermanos adyacentes

Seleccione el primer elemento adyacente al elemento de destino y el primer elemento adyacente al mismo nivel

<p>段落1</p>
<p id="p2">段落2</p>
<text>文本</text>
<p>段落3</p>

#p2+text{
    
    
   color:red;
}

2.1.8 Selectores de hermanos genéricos

Todos los elementos seleccionados adyacentes serán modificados

<p>段落1</p>
<p id="p2">段落2</p>
<text>文本</text>
<p>段落3</p>
#p2~text{
    
    
	   color:red;
	}

2.2 Selectores de elementos de pseudoclase

2.2.1 El mouse se mueve y cambia (desplazarse)

<text>文字1</text>
text:hover{
    
    
  color:red;
  font-size:80px;
}

2.2.2 una etiqueta dedicada - ha sido visitada (visitado)

Cuando se ha accedido a la etiqueta, el efecto de estilo de la etiqueta cambia

a:visited{
    
    
	  color:red;
	}

2.3 Efectos de estilo CSS

1. Estilo de texto

Puede lograr: fuente de texto, tamaño, grosor, subrayado, inclinación, espaciado, color, sombra

1. Fuente
#t1{
    
    
		font-family: '宋体';
	}
2. Tamaño del texto
#ti{
    
    
  font-size:18upx;   #uni-app特有的像素点单位描述
}
3. Texto en negrita
#t1{
    
    
		font-weight: 500;
	}
4. Inclinación del texto
#t1{
    
    
		font-style: italic;
	}
5. Sombra de texto
#t1{
    
    
    text-shadow: 1px 0px 2px red;
   }
6. Espaciado de texto
#t1{
    
    
		letter-spacing:10upx;
	}
7. Texto subrayado
#t1{
    
    
		/*text-decoration: underline;*/ /* 下划线*/
		text-decoration:line-through; /* 中横线*/
		color:red;
	}
8. Color del texto
#t1{
    
    
  color:red; /* 英文单词 */
  color:rgb(255,255,0); /* rgb三原色色值 */
  color:#76C379; /* 16进制色值 */
  color:rgba(255,255,0,0.5)
}

2. Estilo de fondo

fondo

1. Color de fondo
h1{
    
    
		background-color: aquamarine;
	}
2. Color de fondo degradado

gradiente lineal

h1{
    
    
		background:linear-gradient(90deg,red,blue);
}

inserte la descripción de la imagen aquí

Gradiente central

h1{
    
    
		background:radial-gradient(red,blue);
	}

inserte la descripción de la imagen aquí

3. Imagen de fondo
h1{
    
    
		/* 背景图片 */
		background-image: url('图片地址');
	}

inserte la descripción de la imagen aquí

4. Relación de estiramiento de imagen
h1{
    
    
		/* 背景图片 */
		background-image: url('图片地址');
		background-size: 100% 100%;  /* 图片【宽】、【高】拉伸属性 */
	}

inserte la descripción de la imagen aquí

5. Método de mosaico de la imagen de fondo
.mydiv{
    
    
		width: 800upx;
		height: 500upx;
		background-image: url('gk');
		background-repeat: repeat-y; /*默认repeat:使用平铺 no-repeat:背景图片不平铺  repeat-y:纵向平铺 repeat-x:横向平铺*/
	}
6. Posicionamiento de la imagen de fondo
.mydiv{
    
    
		width: 80upx;
		height: 80upx;
		border: 1px solid red;
		background-image: url('../../static/comm-spr.png');
		background-position: 150upx 50upx; /* 背景图片定位: 【X轴移动像素点】 【Y轴移动像素带你】 */
	}

inserte la descripción de la imagen aquí

3. Modelo de caja

inserte la descripción de la imagen aquí

El modelo de caja consta de 4 partes:
1. margen: margen exterior
2. borde: borde
3. relleno: margen interior
4. contenido: contenido del elemento

div{
    
    
   margin:10px; /* 上右下左都有10个像素点的外边距 */
   border:1px solid black; /* 边框的描述 */
   padding: 10px; /* 上右下左都有10个像素嗲你的内边距 */
   width:100upx; /* 宽高指的内容宽高 */
   hegiht:100upx;
}
Cómo establecer los valores de margen y relleno
  1. Método de configuración de valor único: margen: 20 px; superior, derecha, inferior e izquierda son todos márgenes de 20 px
  2. Método de configuración bilateral: margen: 20px 10px; arriba y abajo 20 izquierda y derecha 10
  3. Método de configuración de cuatro lados: margen: 10px 20px 30px 40px; descripción en el sentido de las agujas del reloj, arriba a la derecha, abajo a la izquierda
  4. Las palabras en inglés describen un lado:
    margen superior: 10 px;
    margen izquierdo: 40 px;
    margen derecho: 50 px;
    margen inferior: 60 px;
    resumen: superior: superior, inferior: inferior, izquierda: izquierda, derecha: derecha
método de configuración de borde
  1. Escritura completa de una sola línea:
    borde: 1 px gris sólido,
    borde: color de tipo de estilo de grosor de borde;

  2. Describa el estilo de borde de un lado especial:
    palabra de posición de borde: color de tipo de estilo de grosor de borde,
    por ejemplo: estilo de borde inferior:
    borde inferior: 1 px negro sólido;

Tipo de estilo de borde:
  1. sólido: línea continua
  2. punteado: línea punteada (línea punteada de origen)
  3. doble: cuadro línea punteada
Reglas de cálculo del modelo de caja

Cálculo del tamaño de la caja: margen+relleno+borde+ancho\alto

Cambie las reglas de cálculo del modelo de caja:
box-sizing: border-box;
Deje que los valores de ancho y alto establecidos se calculen como el tamaño total de padding+border+content, para que el modelo de caja no se deforme

4 CSS-Posicionamiento

Propósito de posicionamiento: darse cuenta de que los elementos en la página web pueden aparecer en la posición especificada (superposición, fijo, desplazamiento relativo)
método de posicionamiento: posicionamiento fijo (fijo), posicionamiento relativo (relativo), posicionamiento absoluto (absoluto), posicionamiento fijo

La descripción de orientación tiene cuatro valores de orientación:

  1. izquierda: el número de píxeles desde el borde izquierdo
  2. derecha: el número de píxeles desde el borde derecho
  3. bottom: el número de píxeles desde el borde inferior
  4. top: el número de píxeles desde la parte superior

Nota: Por lo general, solo se describen las dos posiciones de borde más cercanas, izquierda+arriba, derecha+abajo, izquierda+abajo, derecha+arriba

1. Posicionamiento fijo

Siempre se fijará en la posición relativa de la pantalla y no cambiará.

Caja: botón pequeño fijo arriba

<view class="myDiv">
			1
		</view>
		
		<text>回到顶部</text>
.myDiv{
    
    
		height: 9000px;
		width: 150px;
		background:linear-gradient(180deg,blue,red)
	}
	text{
    
    
		position: fixed; /* 固定定位 */
		right: 10px;
		top: 50px;
	}

inserte la descripción de la imagen aquí

2. Posicionamiento relativo

Desplazamiento relativo a su posición original, pero la posición original no se ocupará

<view class="myDiv1">
			div1
		</view>
		<view class="myDiv2">
			div2
		</view>
.myDiv1{
    
    
		height: 150px;
		width: 150px;
		background-color: aqua;
		position: relative;
		top: 10px;
		left: 20px;
	}
	.myDiv2{
    
    
		height: 150px;
		width: 150px;
		background-color: red;
		
		
	}

inserte la descripción de la imagen aquí

3. Posicionamiento absoluto
<view class="myDiv1">
			
			<view class="myDiv2">div2</view>
			
		</view>
.myDiv1 {
    
    
	height: 150px;
	width: 150px;
	background-color: aqua;
	position: relative;
	top: 10px;
	left: 20px;
}
.myDiv2 {
    
    
	height: 50px;
	width: 50px;
	background-color: red;
	position: relative; 
	/* 相对于父级元素偏移(要求父级元素也使用了position属性,如果没有则相对于网页进行偏移) */
	top:10px;
	left:10px;
}

inserte la descripción de la imagen aquí

marco vue

1. ¿Qué es Vue?

Vue.js es un marco JS de front-end, ligero y basado en datos que proporciona enlaces de datos eficientes y sistemas de componentes flexibles a través de una API concisa .

2. ¿Cuáles son las ventajas técnicas en comparación con Jquery?

Antiguo: Jquery

Manipular elementos DOM

jQuery usa un selector ($) para seleccionar objetos DOM y realiza operaciones como asignación, recuperación de valores y enlace de eventos en ellos. De hecho, la diferencia con el HTML nativo es que los objetos DOM se pueden seleccionar y manipular de manera más conveniente, mientras que los datos y las interfaces están juntas

Las páginas complejas son costosas de mantener

jquery necesita obtener el nodo del elemento dom y agregar una etiqueta al dom.Si la estructura dom es particularmente complicada, o los elementos agregados son muy complicados, el código se volverá muy complicado y la legibilidad será baja.

Difícil de lograr páginas en componentes

La mayor parte del código en la era JQuery es código fideo, y el acoplamiento es serio

pérdida de rendimiento

Consumo de recursos del navegador

Nuevo: Vue.js

Separación de datos y vistas

Vue separa completamente los datos y la vista a través de los objetos de Vue. Ya no es necesario hacer referencia al objeto DOM correspondiente para operar sobre los datos, se puede decir que los datos y la Vista están separados, y están vinculados entre sí a través de la vm del objeto Vue. Este es el legendario MVVM.

Enlace bidireccional de datos

Esta es la mayor ventaja de vue.js. El enlace bidireccional de datos se realiza a través de la idea de MVVM, de modo que los desarrolladores ya no necesitan operar objetos DOM y tienen más tiempo para pensar en la lógica comercial.

Componentización flexible

Vue.js divide varios módulos en una aplicación de una sola página en componentes individuales a través de componentes. Solo necesitamos escribir primero varias etiquetas de componentes en la aplicación principal y escribir los componentes que se pasarán en las etiquetas de componentes. Ingrese los parámetros de los componentes , y luego escriba la implementación de varios componentes por separado, y luego se completará toda la aplicación.

DOM virtual, corre más rápido

El DOM virtual es un tipo de cálculo que se puede realizar a través de JavaScript por adelantado para calcular y optimizar la operación DOM final. Dado que esta operación DOM es una operación de preprocesamiento y en realidad no opera el DOM, se denomina DOM virtual.

3. ¿Qué es el enlace bidireccional?

Un cambio en la capa de vista afectará el contenido de la capa de datos, y un cambio en el contenido de la capa de datos afectará el efecto del marco MVVM de la capa de vista
(Model-View-ViewModel)
inserte la descripción de la imagen aquí

4. Características técnicas de Vue

inserte la descripción de la imagen aquí

5. Introducir los principales archivos y usos del proyecto en uniapp

Basado en la explicación de uniapp, uniapp también se implementa en base a vue, por lo que también tiene archivos principales relevantes

1. Archivo App.vue

Archivo de función del ciclo de vida del software de la aplicación:

<script>
	export default {
      
      
		// 三个app加载钩子函数
		// 1. 当app加载时会触发的函数
		onLaunch: function() {
      
      
		// 在整个app生命周期中只会被执行一次
			console.log('App Launch')
		},
		// 2. 当app页面被展示(显示主页页面时)
		onShow: function() {
      
      
		// 每一次打开app(从后台切换到前台显示)
			console.log('App Show')
		},
		// 3.当关闭app或者app进入后台时会触发的函数
		onHide: function() {
      
      
		// 每一次关闭或者切换到后台运行都会触发
			console.log('App Hide')
		}
	}
</script>

<style>
	/*每个页面公共css */
</style>

2. archivo principal.js

Describe el archivo de entrada de la aplicación.

// main.js是程序的入口文件,项目只要编译运行就会先执行main.js文件
// main.js经常使用与配置和全局组件引入功能

// 导入app.vue页面
import App from './App'

// #ifndef VUE3

// 导入vue组件
import Vue from 'vue'
// 是否要关闭隐藏代码警告
Vue.config.productionTip = false

// uniapp配置- 声明app标识符
App.mpType = 'app'

try {
    
    
  function isPromise(obj) {
    
    
    return (
      !!obj &&
      (typeof obj === "object" || typeof obj === "function") &&
      typeof obj.then === "function"
    );
  }

  // 统一 vue2 API Promise 化返回格式与 vue3 保持一致
  uni.addInterceptor({
    
    
    returnValue(res) {
    
    
      if (!isPromise(res)) {
    
    
        return res;
      }
      return new Promise((resolve, reject) => {
    
    
        res.then((res) => {
    
    
          if (res[0]) {
    
    
            reject(res[0]);
          } else {
    
    
            resolve(res[1]);
          }
        });
      });
    },
  });
} catch (error) {
    
     }

const app = new Vue({
    
    
  ...App
})
app.$mount()
// #endif

// #ifdef VUE3


import {
    
     createSSRApp } from 'vue'
export function createApp() {
    
    
	// 创建一个uniapp实例(保证整个项目只有一个实例)
  const app = createSSRApp(App)
  return {
    
    
    app
  }
}
// #endif

3. archivo manifest.json

Los applets, las aplicaciones y los archivos de configuración de aplicaciones
deben abrirse con HBuilderX
inserte la descripción de la imagen aquí

4.pages.json - archivo de configuración de la ruta del componente

{
    
    
	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		{
    
    
			"path": "pages/index/index", // 页面的地址
			"style": {
    
     // 每个页面的组件样式
				"navigationBarTitleText": "首页"
			}
		}
	    ,{
    
    
            "path" : "pages/index/test1/test1",
            "style" :                                                                                    
            {
    
    
                "navigationBarTitleText": "",
                "enablePullDownRefresh": false
            }
            
        }
    ],
	"globalStyle": {
    
     // 全局组件样式配置
		"navigationBarTextStyle": "black", // 组件导航栏文字颜色
		"navigationBarTitleText": "uni-app", // 组件导航栏默认文字
		"navigationBarBackgroundColor": "#F8F8F8", // 导航栏背景颜色
		"backgroundColor": "#F8F8F8" // 组件背景颜色
	},
	"uniIdRouter": {
    
    }
}

6. Versión Vue2.0 - función de ciclo de vida

El ciclo de vida de cada componente de la página.

1. Fase de creación de componentes (crear) ---- también activará la devolución de llamada uniapp-onShow
2. Fase de representación de componentes (montaje)
3. Fase de ejecución de componentes: actualización de modificación de enlace bidireccional de datos (actualización)
4. Fase de destrucción de componentes (destruir ) ---- también activará la devolución de llamada uniapp-onhide

1. Fase de creación de componentes - crear

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-1gJR5kD5-1681301986776) (observe la imagen/imagen-20230307152128103.png)]

  1. componente instanciado
    1. beforeCreate antes de la creación
  2. Habilitar el monitoreo de datos
  3. Inicializar el método interno de vue
    1. creado creado

caso:

<template>
	<view class="content">
		<view class="myDiv1">
			组件页面
		</view>
		
	</view>
</template>

<script>
	
export default {
      
      
	data() {
      
      
		return {
      
      
			
		};
	},
	// 创建阶段不会渲染html
	// 创建前生命周期函数-html不会开始渲染,只是刚刚进入组件要开始加载的阶段
	beforeCreate(){
      
      
		console.dir("1.创建前---");
	},
	// 创建后生命周期函数-- 组件参数、绑定的数据初始化完成
	created(){
      
      
		console.dir("2.创建后---");
	},
	methods: {
      
      
		
	}
};
</script>

<style>
	
</style>

2. Fase de representación de componentes - montaje

inserte la descripción de la imagen aquí

  1. Vue elige renderizar la plantilla, ya sea para usar el componente vue para renderizar o simplemente para renderizar parte del html

    ​ 1.beforeMount: antes de que se represente el elemento dom

  2. comenzar a renderizar

    1. montado: el montaje del dom está completo (el componente está completamente cargado, una función de enlace que se usa a menudo en el desarrollo)

caso:

<template>
	<view class="content">
		<view class="myDiv1">
			组件页面
		</view>
		
	</view>
</template>

<script>
	
export default {
      
      
	data() {
      
      
		return {
      
      
			
		};
	},
	// html渲染前 -- html(template标签中的内容才刚刚开始渲染)
	beforeMount(){
      
      
		console.dir("3.组件渲染前--");
	},
	// html渲染完成-- html(template标签中的内容已完全渲染完成)
	mounted(){
      
      
		console.dir("4.渲染完成--");
	},
	methods: {
      
      
		
	}
};
</script>

<style>
	
</style>

3. Fase de ejecución del componente - actualización de datos - actualización

inserte la descripción de la imagen aquí

  1. El oyente monitoreará todos los cambios de valor de datos

    ​ 1.beforUpdate - antes de la actualización de datos

  2. Use VDom para renderizar html dinámicamente

    1. actualizado: la representación de datos está completa

Caso: el caso de la intercepción a la transformación de datos

<template>
	<view class="content">
		<view class="myDiv1">
			组件页面---{
   
   { name }}
			<button @click="aa">改变name值</button>
		</view>
		
	</view>
</template>

<script>
	
export default {
      
      
	data() {
      
      // 需要实现双向绑定的数据要写在data (){reutrn{ 语句块中 }}
		return {
      
      
			name:"蔡徐坤"
		};
	},
	// 数据更新之前
	beforeUpdate() {
      
      
		console.dir("数据更新之前--");
		debugger
	},
	//数据更新之后
	updated() {
      
      
		console.dir("数据更新之后--");
	},
	methods: {
      
      
		aa(){
      
      
			this.name = "吴彦祖";
		}
	}
};
</script>

<style>
	
</style>

4. Fase de destrucción de componentes - destruir

Nota: De forma predeterminada, el componente no se destruirá activamente. Debe usar la instrucción v-if o Vue.$destroy() para activar el proceso de destrucción de vue.

inserte la descripción de la imagen aquí

  1. Si el componente entra en el proceso de destrucción (instrucción v-if o Vue.$destroy())
    1. beforeDestroy - antes de destruir
  2. Destruir: todas las cachés de valores de datos en el componente desaparecerán y la caché de vdom también se borrará
    1. destruido - destruido

caso:

<template>
	<view class="content">
		<view class="myDiv1">
			组件页面---{
   
   { name }}
			<button @click="aa">改变name值</button>
		</view>
		
	</view>
</template>

<script>
	
export default {
      
      
	data() {
      
      // 需要实现双向绑定的数据要写在data (){reutrn{ 语句块中 }}
		return {
      
      
			name:"蔡徐坤"
		};
	},
	// 组件销毁之前
	beforeDestroy() {
      
      
		console.dir("3.组件销毁之前--");
	},
	// 组件销毁之后
	destroyed() {
      
      
		console.dir("4.组件销毁之后--");
	},
	methods: {
      
      
		aa(){
      
      
			this.name = "吴彦祖";
		}
	}
};
</script>

<style>
	
</style>

7. Sintaxis de Vue - expresión de interpolación

La expresión de interpolación es un par de llaves { { elementos para colocar datos de enlace bidireccional }}

caso:

<template>
	<view class="content">
		<view class="myDiv1">
			<!-- 在此处,插值表达式就会将name对应的数据“蔡徐坤”渲染到插值表达式所在的位置 -->
			组件页面---{
   
   { name }}
		</view>
		
	</view>
</template>

<script>
	
export default {
      
      
	data() {
      
      // 需要实现双向绑定的数据要写在data (){reutrn{ 语句块中 }}
		return {
      
      
			name:"蔡徐坤"
		};
	},
	methods: {
      
      
	}
};
</script>

directiva v-once

Rol: Describa que la expresión de interpolación solo vinculará el valor de datos original del componente y no se puede cambiar
Caso:

<template>
	<view class="content">
		<view class="myDiv1">
			<span>{
   
   { name }}</span>
			<hr/>
			<!-- 让数据双向绑定的效果失效,只加载第一次绑定的数据进行渲染 -->
			<span v-once>{
   
   { name }}</span>
			<button @click="name='吴彦祖'">name改变为“吴彦祖”</button>
		</view>
		
	</view>
</template>

8. comando vue

1. v-si \v-si no

Características: para permitir que los componentes o las etiquetas se monten (verdadero) o se eliminen (falso)

<!-- 当v-if值为true时:标记的标签或者组件会被加载
            为false是:标记的组件或标签会被移除
 -->
<div v-if="布尔值数据" >XXX</div>

caso:

<template>
	<view class="content">
		<view class="myDiv1">
			<h1 v-if="isLoading" >大家好!我是XXX</h1>
			<button @click="changeSapn()">切换</button>
		</view>
	</view>
</template>

<script>
export default {
      
      
	data() {
      
      
		return {
      
      
			name: '蔡徐坤',
			isLoading:false
		};
	},
	
	methods: {
      
      
		changeSapn() {
      
      
			if(this.isLoading==false){
      
      
				this.isLoading = true;
			}else{
      
      
				this.isLoading = false;
			}
		}
	}
};
</script>

<style></style>

inserte la descripción de la imagen aquí

v-otro

Activa la carga de v-else cuando v-if no está satisfecho

<h1 v-if="age>11">XXX</h1>
<h1 v-else>吴彦祖</h1>

2. v-mostrar

Características: los componentes o etiquetas existen todo el tiempo, solo muestre u oculte componentes o etiquetas a través de css

<template>
	<view class="content">
		<view class="myDiv1">
			<h1 v-show="isLoading" >大家好!我是XXX</h1>
			<button @click="changeSapn()">切换</button>
		</view>
	</view>
</template>

<script>
export default {
      
      
	data() {
      
      
		return {
      
      
			name: '蔡徐坤',
			isLoading:false
		};
	},
	
	methods: {
      
      
		changeSapn() {
      
      
			if(this.isLoading==false){
      
      
				this.isLoading = true;
			}else{
      
      
				this.isLoading = false;
			}
		}
	}
};
</script>

<style></style>

inserte la descripción de la imagen aquí

3. v-on (vinculación de eventos)

<button v-on:dblclick="changeSapn">切换</button>

v-on está escrito en la etiqueta para activar el evento, v-on: nombre del evento = "la cantidad de líneas que se llamarán después de que se active el evento"

Tipos de disparadores de eventos:

nombre del evento escritura de eventos
haga doble clic dblclick
hacer clic hacer clic
ratón sobre mouseove
ratón fuera ratón fuera

El método de vinculación abreviada de eventos en vue

<button @dblclick="changeSapn">切换</button>

@EventName = "Número de líneas a llamar después de que se active el evento"

4. v-para

1. Método de colección o matriz en bucle

<template>
	<view class="content">
		<view class="myDiv1">
			<!-- 将arr的数据循环为三个h1标签 -->
			<h1 v-for="(item,index) in arr">{
   
   { index }}{
   
   { item.name }} - {
   
   { item.age }}</h1>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			arr:[
				{
					name:"张三",
					age:18
				},
				{
					name:"李四",
					age:28
				}
			]
		};
	},
	

inserte la descripción de la imagen aquí
2. Mapa de bucles

<template>
	<view class="content">
		<view class="myDiv1">
			<!-- 如果循环的是一个对象或map集合,item代表的是对象的属性值,index代表的是对象的属性名 -->
			<h1 v-for="(item,index) in resMap">{
   
   { index }}{
   
   { item }}</h1>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			resMap:{
				name:"蔡徐坤",
				age:26,
				sex:"男"
			}
		};
	},

inserte la descripción de la imagen aquí

5. v-model (enlace de datos de formulario)

Ser capaz de vincular la entrada de datos por el componente (componente de formulario) a los datos

<template>
	<view class="content">
		<view class="myDiv1">
			<h1>{
   
   { userData.name }} - {
   
   { userData.age }} - {
   
   { userData.context }}</h1>
			<!-- 单行文本输入 -->
			<label>单行文本</label>
			<input type="text" placeholder="请输入姓名..."  v-model="userData.name"/>
			<hr/>
			<!-- 多行文本输入 -->
			<label>多行文本</label>
			<textarea v-model="userData.context" />
			<hr/>
			<!-- 数字输入框 -->
			<label>数字输入框</label>
			<input type="number" placeholder="请输入年龄..."  v-model="userData.age"/>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			userData:{
				name:null,
				age:0,
				context:null
			}
		};
	},

8. Vue Oyente

Puede monitorear los cambios de datos en la página del componente, y cuando los datos cambien, se activará la función vinculada al oyente.

<template>
	<view class="content">
		<view class="myDiv1">
			<h1>{
   
   { userData.name }}</h1>
			<label>单行文本</label>
			<input type="text" placeholder="请输入姓名..."  v-model="userData.name"/>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			name:null,
			userData:{
				name:null
			}
		};
	},
	// 定义监听器组件
	watch:{
		// 监听普通数据
		name:function(newValue,oldValue){
			console.dir("新数据:"+newValue);
			console.dir("旧数据:"+oldValue);
		},
		// (监听对象中的属性变化)监听userData对象中name数据的改变
		"userData.name":function(newValue,oldValue){
			console.dir("新数据:"+newValue);
			console.dir("旧数据:"+oldValue);
		}
	},

9. Funciones

Encapsule algunos cálculos u operaciones comunes e implemente la ejecución del contenido de la función a través de eventos o llamadas activas, lo que puede reducir la escritura de código repetitivo.

<template>
	<view class="content">
		<view class="myDiv1">
			<!-- 在插值表达式中调用函数,插值表达式如果调用方法需要定义返回值 -->
			{
   
   { twoNumberSum(1,2) }}
			<button @click="aa()" >测试</button>
		</view>
	</view>
</template>

<script>
export default {
      
      
	data() {
      
      
		return {
      
      
			name:null,
			userData:{
      
      
				name:null
			}
		};
	},
    // 定义js函数的位置 - 两种触发方法:1.事件触发 @click="twoNumberMax(1,2)"  2.在vue组件中主动调用
	methods: {
      
      
		// 计算两个数值的最大值
		twoNumberMax(number1,number2){
      
      
			if(number1>number2){
      
      
				console.dir(number1);
			}else{
      
       // 进入else调用aa方法
				this.aa(); // 调用组件中别的方法要使用this.方法名(实参列表)
			}
		},
		aa(){
      
      
			let sumData = this.twoNumberSum(5,8);
			console.dir(sumData);
		},
		// 计算两个数之和,计算结果返回给调用处
		twoNumberSum(arg1,arg2){
      
      
			var sumData = arg1+arg2;
			if(sumData>100){
      
      
				return "大于100";
			}else{
      
      
				return "小于等于100";
			}
			 // return 语句要在执行逻辑的最后一步编写
		},
		// 
	}
};
</script>

<style></style>

marco de interfaz de usuario

Marco de interfaz de usuario del lado web relacionado con el marco Vue

(1) ElementUI
https://element.eleme.cn/#/zh-CN
es adecuado para el marco del lado web
inserte la descripción de la imagen aquí
(2) Ant Design para Vue
https://www.antdv.com/components/anchor
inserte la descripción de la imagen aquí

Marco de interfaz de usuario del lado web relacionado con el marco Html

(1)Layui
https://www.layuiweb.com/
inserte la descripción de la imagen aquí
(2)Bootstarp
https://www.bootcss.com/
inserte la descripción de la imagen aquí

Marco de interfaz de usuario móvil relacionado con el marco uni-app

(1) Marco uView
https://www.uviewui.com/
inserte la descripción de la imagen aquí

uni-app integra el marco uViewUI

1. Crea un proyecto vacío uniapp

inserte la descripción de la imagen aquí

2. Descargue la biblioteca de clases uView del mercado de componentes

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

hbuilderX debe asegurarse de que se haya instalado la compilación SCSS

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3. Introducir el componente uView en el proyecto

Importe la biblioteca de componentes de uView en main.js

// 导入uView组件
import uView from '@/uni_modules/uview-ui';
Vue.use(uView);

importar tema.scss en uni.scss

/* 导入uView样式库-主题库 */
@import '@/uni_modules/uview-ui/theme.scss'

Introduzca el estilo en la primera línea de la etiqueta de estilo de App.vue

<style lang="scss">
	/*每个页面公共css */
	/* uView组件库样式 */
	@import '@/uni_modules/uview-ui/index.scss'
</style>

Importación automática de componentes, page.json

Recordatorio:
para depurar el rendimiento de uni-app, la modificación de las reglas de easycom no tendrá efecto en tiempo real. Después de la configuración, debe reiniciar HX o volver a compilar el proyecto para usar la función uView normalmente.
Asegúrese de tener solo un campo de easycom en su archivo pages.json; de lo contrario, combine varias reglas de importación usted mismo.
Si importa uView a través de uni_modules, puede ignorar esta configuración

{
    
    
	// 如果您是通过uni_modules形式引入uView,可以忽略此配置
	"easycom": {
    
    
		"^u-(.*)": "@/uni_modules/uview-ui/components/u-$1/u-$1.vue"
	},
	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		{
    
    
			"path": "pages/index/index",
			"style": {
    
    
				"navigationBarTitleText": "uni-app"
			}
		}
	],
	"globalStyle": {
    
    
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "uni-app",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8"
	},
	"uniIdRouter": {
    
    }
}

Supongo que te gusta

Origin blog.csdn.net/gjb760662328/article/details/129596258
Recomendado
Clasificación