前端四要素
- 逻辑 :判断,循环
- 事件 :浏览器事件(window,document);DOM事件(增删改,遍历)
- 视图 :html,css,js
- 通信 : XmlHttpRequest,Ajax,Axios,websocket
javascript 框架
jQuery -----Ajax可以实现通信
Angular ------模块化mvc
React ----------虚拟Dom
Vue----------只专注视图
Axios------------前端通信框架
UI框架
-
基于React
Ant-Design(阿里)
-
基于Vue
iview ( iview-admin) 饿了么出品 ,基于npm+webpack+babel 开发 , 支持移动端多些
ElementUI ==(Vue-element-admin) == 阿里; 支持PC端多些
ice
- 其他
Bootstrap 开源工具包
AmazeUI HTML5跨屏前端框架
javascript 构建工具
Babel: js编译:Typescript
webpack: 打包器
前端模板网站
layui
Jquery API
源码之家
前端开发软件
vscode, hubilder, sublime, webstrom, idea , idea+vue插件
vue
mvvm架构思想
vue开发
{{}}
v-bind:
v-if=
v-else-if=
v-else=
v-for=
v-on: 监听事件
v-model="" 双向绑定
vue七大属性
el:
data:
methods:
template:
render:
computed:
watch:
第一个程序
安装 vue.js插件 node.js插件
<head>
<meta charset="UTF-8">
<title>第一个vue程序</title>
</head>
<body>
<div id="app">
{{message}} //展示数据 用 {{}} 或 v-bind:
<span v-bind:title="message">asdfhfahd;fkhdjk;fds;f </span>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el: '#app', //绑定元素
data: {
message: 'hello,first vue'
}});
</script>
</body>
判断,循环
<head>
<meta charset="UTF-8">
<title>判断,循环</title>
</head>
<body>
<div id="app">
<h1 v-if="message===1">1</h1>
<h1 v-else-if="message===2">2</h1>
<h1 v-else>0</h1>
</div>
<div id="app1">
<h1 v-for="item in items">
{{item.text}}
</h1>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data: {
message: 2
}});
var vm1=new Vue({
el: '#app1',
data: {
items:[
{text: 'java基础'}, {text: 'SQL高级'}, {text: 'suanfa'}
]}});
</script>
</body>
事件
<head>
<meta charset="UTF-8">
<title>事件</title>
</head>
<body>
<div id="app">
<button v-on:click="sayhi">click me</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data: {
message: 'hello,vue'
},
methods: {
sayhi: function (event) {//方法,监听event
alert(this.message)
}
}
});
</script>
</body>
自定义组件
<head>
<meta charset="UTF-8">
<title>组件</title>
</head>
<body>
<div id="app">
<!--使用组件-->
<selfcom v-for="item in items" v-bind:selfval="item"></selfcom>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
//自定义组件
Vue.component('selfcom',{
props: ['selfval'], //接收参数
template: '<li>{{selfval}}</li>'
});
var vm = new Vue({
el: '#app',
data: {
items:["java","mysql","linux"]
}
});
</script>
</body>
axios 异步通信
axios API文档
安装 axios
使用 npm:
$ npm install axios
使用 bower:
$ bower install axios
使用 cdn:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<head>
<meta charset="UTF-8">
<title>异步通信</title>
</head>
<body>
<div id="app">
<h1>{{info.name}}</h1>
<h1>{{info.sex}}</h1>
<h1>{{info.hobbys.first}}</h1>
</div>
<!--引入js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
var vm=new Vue({
el: '#app',
data(){
return{//return一个格式
info:{
name: null,
sex: null,
hobbys:{
first: null,
second: null
}}
}},
mounted(){//钩子函数
axios.get('../data.json').then(response=>(this.info=response.data));
}
});
</script>
</body>
data.json
{
"name": "luxiangmin",
"sex": "woman",
"hobbys": {
"first": "playball",
"second": "run"
},
"friends": [
{
"name": "zhanshang", "sex": "boys"},
{"name": "wangwu", "sex": "girl"}
]
}
计算属性:可以将不经常变化的数据,缓存,能快速取,减少开销
插槽slot
<body>
<div id="app">
<todo>
<todo-tile slot="todo-tile" :tile="tile"></todo-tile>
<todo-items slot="todo-items" v-for="item in items" v-bind:item="item"></todo-items>
</todo>
</div>
<!--引入js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
Vue.component('todo',{
template: '<div> ' +
'<slot name="todo-tile"></slot>' +'<ul>' +'<slot name="todo-items"></slot>'+
'</ul>'+ '</div>'
});
Vue.component('todo-tile',{
props: ['tile'],
template: '<div>{{tile}}</div>'
});
Vue.component('todo-items',{
props: ['item'],
template: '<li>{{item}}</li>'
});
var vm=new Vue({
el: '#app',
data: {
tile: '书籍列表',
items: ['数据结构','算法','java语言']
}
});
</script>
</body>
自定义事件分发
<body>
<div id="app">
<todo>
<todo-tile slot="todo-tile" :tile="tile"></todo-tile>
<todo-items slot="todo-items" v-for="(item ,index) in items"
v-bind:item="item" :index="index" v-on:remove="removeitem(index)" :key="index"></todo-items>
</todo>
</div>
<!--引入js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
Vue.component('todo',{
template: '<div> ' +
'<slot name="todo-tile"></slot>' +'<ul>' +'<slot name="todo-items"></slot>'+
'</ul>'+ '</div>'
});
Vue.component('todo-tile',{
props: ['tile'],
template: '<div>{{tile}}</div>'
});
Vue.component('todo-items',{
props: ['item','index'],
template: '<li>{{index}} {{item}}<button @click="remove">删除</button></li>',
methods: {
remove: function (index) {
this.$emit('remove',index);
}
}
});
var vm=new Vue({
el: '#app',
data: {
tile: '书籍列表',
items: ['数据结构','算法','java语言']
},
methods: {
removeitem: function (index) {
console.log("删除"+this.items[index]+"ok");
this.items.splice(index,1);
}
}
});
</script>
</body>
vue-cli开发 脚手架框架
vue-cli 快速生成vue的项目模板:
统一的目录结构
环境
1.node.js 下载 https://nodejs.org/en/download/
第一个vue-cli 项目
在idea中打开项目
webpack
打包降级的功能,将ES6降为ES5
安装: npm install webpack -g
npm install webpack-cli -g
查看安装版本: webpack -v
webpack-cli -v
使用示例:
新建一个空文件,idea打开
1. hello.js
//暴露一个方法
exports.sayhi = function () {
document.write("<h1>暴露 sayji</h1>");
};
exports.saybeey = function () {
document.write("<h1>暴露 saybeey</h1>");
};
2. main.js
//变量hello接收请求到的对象,并可以调用方法
var hello=require("./hello");
hello.sayhi();
hello.saybeey();
3. webpack.config.js
module.exports = {
entry: './modules/main.js', //打包入口
output: {
filename: './js/bundle.js' //打包输出
}
};
4. 执行打包命令 webpack
5. dist/js/bundle.js 是打包后的结果
6. 在 index.html 中引用 bundle.js 就可以了
vue-router 重定向,传参
npm install vue-router --save-dev
// ./router/index.js 路由配置文件
import Vue from 'vue'
import VueRouter from "vue-router"
//导入要路由的组件
import main from "../components/main";
import mycontent from "../components/mycontent";
//安装路由
Vue.use(VueRouter);
//配置路由导出
export default new VueRouter({
routes: [
{
//请求的路由路径
path: '/content',
//路由名称
name: 'content',
// 返回要跳转的组件
component: mycontent
},{
//请求的路由路径,接收id参数
path: '/main/:id',
//路由名称
name: 'main',
// 返回要跳转的组件
component: main
},{
path: '/tomain',
redirect: '/main'//重定向
}
]
});
// main.js 项目入口
import Vue from 'vue'
import App from './App'
//导入路由配置目录
import router from './router'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
// APP.vue 入口组件
<template>
<div id="app">
<h1>vue router</h1>
<!--:to="{name: 'main', params: {id:1}} 参数传递-->
<router-link :to="{name: 'main', params: {id:1}}">首页</router-link>
<router-link to="/mycontent">详情</router-link>
<!--展示页面-->
<router-view > </router-view>
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
//main.vue
<template>
<div>
<h1>主页</h1>
<!--显示参数-->
{{$route.params.id}}
</div>
</template>
<script>
export default {
name: "main"
}
</script>
<style scoped>
</style>