<html>
<head>
<meta charset="utf-8">
<title>title>
<script src="lib/vue.js" type="text/javascript" charset="utf-8">script>
head>
<body>
<div id="app">
com1>
div>
<template id="tmp1">
<div>
<h1>这是子元素 --- {{parentmsg}}h1>
<input type="button" value="向父组件传递消息" @click="sendMsg" />
div>
template>
<script type="text/javascript">
var com1 = {
template: '#tmp1',
data(){
return{
msg: '给你一些钱,去挥霍吧!'
}
},
props:['parentmsg'],
methods:{
sendMsg(){
this.$emit('func',this.msg);
}
}
}
//创建Vue实例,得到ViewModel
var vm = new Vue({
el:'#app',
data:{
msg: '这是父组件中的数据,爸爸有100块钱,你要不,儿子!',
msgFromSon:''
},
methods:{
getMsgFromSon(data){
this.msgFromSon = data
console.log(this.msgFromSon)
}
},
components:{
com1
}
})
script>
body>
html>
首先在子组件中的data中:msg: ‘给你一些钱,去挥霍吧!’
在父组件中data:msgFromSon:’’
在子组件中: 触发sendMsg方法
然后在:
getMsgFromSon(data){
this.msgFromSon = data
console.log(this.msgFromSon)}
通过这几步,可以将子组件的值传递给父组件。
<html>
<head>
<meta charset="utf-8">
<title>title>
<script src="lib/vue.js" type="text/javascript" charset="utf-8">script>
<script src="./lib/vue-routerv3.1.5.js" type="text/javascript" charset="utf-8">script>
head>
<body>
<div id="app">
<router-link to="login">登录router-link>
<router-link to="register">注册router-link>
<router-view>router-view>
div>
<script type="text/javascript">
// 2.创建子组件
var login = {
template:'这是登陆子组件,这个组件是 巴伯本 开发的
'
}
var register = {
template:'这是登陆子组件,这个组件是 奔波霸 开发的
'
}
// 3.创建一个路由对象
var router = new VueRouter({
routes:[ // 路由规则数组
{path:'',component:login},
{path:'/login',component:login},
{path:'/register',component:register}
]
})
//创建Vue实例,得到ViewModel
var vm = new Vue({
el:'#app',
data:{
},
methods:{
},
// router:router
router
})
script>
body>
html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script src="lib/vue.js" type="text/javascript" charset="utf-8">script>
head>
<body>
<div id="app">
<input type="text" v-model="firstname" @keyup="getFullname"/> +
<input type="text" v-model="lastname" @keyup="getFullname"/> =
<input type="text" v-model="fullname"/>
div>
<script type="text/javascript">
//创建Vue实例,得到ViewModel
var vm = new Vue({
el:'#app',
data:{
firstname: '',
lastname: '',
fullname: ''
},
methods:{
getFullname(){
this.fullname = this.firstname + '-' + this.lastname
}
}
})
script>
body>
html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script src="lib/vue.js" type="text/javascript" charset="utf-8">script>
head>
<body>
<div id="app">
<input type="text" v-model="firstname"/> +
<input type="text" v-model="lastname" /> =
<input type="text" v-model="fullname"/>
div>
<script type="text/javascript">
//创建Vue实例,得到ViewModel
var vm = new Vue({
el:'#app',
data:{
firstname: '',
lastname: '',
fullname: ''
},
methods:{
},
watch:{ // 使用这个属性,可以监视data 中指定的数据变化,然后触发这个 watch 中对应的 function 处理函数
firstname: function(newVal,oldVal){
// 这儿上边的firstname 可以加引号,也可以不加引号。只要在firstname 中没有加‘-’都可以不加引号。
this.fullname = newVal + '-' + this.lastname
},
"lastname": function(newVal){
this.fullname = this.firstname + '-' + newVal
}
}
})
script>
body>
html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script src="lib/vue.js" type="text/javascript" charset="utf-8">script>
<script src="./lib/vue-routerv3.1.5.js" type="text/javascript" charset="utf-8">script>
head>
<body>
<div id="app">
<router-link to="login">登录router-link>
<router-link to="register">注册router-link>
<router-view>router-view>
div>
<script type="text/javascript">
// 2.创建子组件
var login = {
template:'这是登陆子组件,这个组件是 巴伯本 开发的
'
}
var register = {
template:'这是登陆子组件,这个组件是 奔波霸 开发的
'
}
// 3.创建一个路由对象
var router = new VueRouter({
routes:[ // 路由规则数组
{path:'',component:login},
{path:'/login',component:login},
{path:'/register',component:register}
]
})
//创建Vue实例,得到ViewModel
var vm = new Vue({
el:'#app',
data:{
},
methods:{
},
// router:router
router,
watch:{
// this.$route.path
'$route.path': function(newVal,oldVal){
// console.log(newVal + ' --- ' + oldVal)
if (newVal == '/login') {
console.log('欢迎进入登陆页面!')
} else if (newVal == '/register'){
console.log('欢迎进入注册页面!')
}
}
}
})
script>
body>
html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script src="lib/vue.js" type="text/javascript" charset="utf-8">script>
head>
<body>
<div id="app">
<input type="text" v-model="firstname" /> +
<input type="text" v-model="middlename" /> +
<input type="text" v-model="lastname" /> =
<input type="text" v-model="fullname"/>
<p>{{fullname}}p>
<p>{{fullname}}p>
<p>{{fullname}}p>
<p>{{fullname}}p>
div>
<script type="text/javascript">
//创建Vue实例,得到ViewModel
var vm = new Vue({
el:'#app',
data:{
firstname: '',
lastname: '',
middlename: ''
},
methods:{
},
computed:{
// 在computed 中共,可以定义一个些属性,这些属性叫做计算属性,计算属性的本质就是一个方法,只不过,我们在使用这些计算属性的时候,是把他们的名称当作属性直接来使用的,并不会吧计算属性当作方法去调用。
// 注意1:计算属性,在引用的时候,一定不要加() 去调用,直接把他当作 普通 属性去使用就好!
// 注意2:只要计算属性,这个function 内部,所用到的任何data 中的数据发生了变化,就会重新计算这个属性的值。
// 注意3:计算属性的求值结果,会被缓存起来,方便下次使用;如果计算属性方法中,所以来的任何数据都没有发生变化,则不会重新对计算结果求值。
'fullname': function(){
console.log('ok')
return this.firstname + '-' + this.middlename + '-' + this.lastname
}
}
})
script>
body>
html>
webpack
什么是 ?webpack
打包构建.在文档主目录下新建一个
main.js
——这儿用来导入相关的js,css 文件
webpack.config.js
文件const path = require('path')
module.exports = {
mode:'development' ,// 设置mode
// mode 有两种模式 development 开发模式 production 生产模式
entry:
{
main:'./src/main.js', //入口,表示要使用的webpack 打包哪个文件
},
output:{// 输出文件相关配置
path:path.resolve(__dirname,'./dist'),// 指定 打包好的文件,输出到哪个目录中去
filename:'bundle.js'// 这是 指定输出的文件的名称
}
}
webpack
安装npm
全局安装-g
webpackcnpm i webpack -g
webpack
初始化npm init -y
package.json
webpack
处理js类文件webpack 默认只能打包处理 JS 文件,无法处理非 JS 文件。
需要导入哪类 JS 文件,只需要通过控制台导入相关的 JS 文件即可!
导入JS cnpm i 【js文件名】 -d
cnpm 得通过 npm 安装.
npm 是node.js版本中自带的.
通过npm
导入之后,在 main.js 中通过 import $ from 'JS文件名'
引入。
webpack .\src\main.js-o .\dist\bundle.js --mode=development
这是webpack4 中的。命令:webpack
直接进行打包webpack
处理CSS文件使用 import 语法,导入css 样式表
import './CSS/index.css'
import './CSS/index.less'
import './CSS/index.scss'
注意: webpack ,默认只能打包处理 JS 类型的文件,无法处理其他的非 JS 类型的文件;
如果非要处理非 JS 类型的文件,我们需要手动安装一些合适的第三方 loader 加载器;
1. 如果想要打包处理 css 文件,需要安装 `npm i style-loader css-loader -D`
2. 打开 webpack.config.js 这个配置文件,在里面新增一个配置节点,叫做 module ,它是一个对象;
在这个 modlue 对象身上,有个 rules 属性,这个 rules 数组;这个数组中,存放了所有第三方文件的
匹配和处理规则。
module.exports = {
module:{ // 这个节点,用于配置所有的第三方模块加载器。
rules:[ // 所有第三方模块的匹配规则
{test:/\.css$/,use:['style-loader','css-loader']}, // 配置处理 .css 问文件的第三方loader 规则
{test:/\.less$/,use:['style-loader','css-loader','less-loader']}, // 配置处理 .less 文件的第三方包 loader 规则
{test:/\.scss$/,use:['style-loader','css-loader','sass-loader']}, // 配置处理 .scss 文件的第三方loader 规则
]
}
}
webpack-dev-server
工具,来实现自动打包编译的功能package.json
中实现npm i webpack-dev-server -D
把这个工具安装到项目的本地开发环境依赖bundle.js
;dist
src
node_modules
平级,有一个看不见的文件,叫做bundle.jspackage.json
中的script
中添加这个就可以开启自动打包"dev2": "webpack-dev-server --open --port 3000 --contentBase src --hot"
--open
自动打开浏览器--port 300
启动的时候的运行端口contentBase src
指定托管的目录--hot
启用热更新npm run dev
webpack.config.js
中配置dev-server
const webpack = require('webpack')
// 启用热更新的第 2 步
module.exports = {
devServer:{ // 这是配置dev-server 命令参数的第二种形式,相对来说这种方式麻烦一些
// --open --port 3000 --contentBase src --hot
open:true,// 自动打开浏览器
port:3000,// 这只启动的时候的运行端口。
contentBase:'src',// 指定托管的根目录
hot:true // 启用热更新 de 第一步
},
plugins:[ //配置插件的节点
new webpack.HotModuleReplacementPlugin() // new 一个热更新的模块对象,这是启用哦那个热更新的第三步
]
}
html-webpack-plugin
插件const htmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
plugins:[ //配置插件的节点
new htmlWebpackPlugin({ // 创建一个在内存中生成的HTML页面插件。
template:path.join(__dirname,'./src/index.html'), // 指定模板页面,将来会根据指定的页面路径,去生成内存中的页面
filename: 'index.html' // 指定生成的页面的名称
})
],
}
npm i html-webpack-plugin -d