详解如何使用webpack+es6开发angular1.x
发布时间 - 2026-01-11 02:49:16 点击率:次虽然,现在越来越多的人选择使用react、vue以及ng2,但是依然存在相当一部分人在使用angular1.x开发。本文将介绍如何使用webpack+es6+angular1.x+$oclazyLoad实现动态加载。

1.webpack
webpack.config.js
var path = require('path');
var webpack = require('webpack');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
entry: {
home: [
'babel-polyfill',
'./app/app.js' //引入文件
],
common: [
'babel-polyfill',
'angular',
'angular-ui-router',
'oclazyload'
]
},
output: {
path: path.join(__dirname, '/wap'),
filename: '[name].js',
chunkFilename: '[id].build.js?[chunkhash]',
publicPath: '/wap/',
},
module: {
loaders: [
{
test:/\.js?$/,
loader:'ng-annotate-loader!babel-loader',
exclude:/node_modules/
},
{
test: /\.html$/,
loader: 'raw-loader',
exclude: /node_modules/
},
]
},
resolve: {
root: ['node_modules'],
extensions: ['', '.js', '.html', '.json'],
modulesDirectories: ['node_modules'],
alias: {}
},
externals: {},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new ExtractTextPlugin('[name].[contenthash:20].css'),
new webpack.optimize.UglifyJsPlugin({
compress: {warnings: false},
sourceMap: true
}),
new webpack.optimize.CommonsChunkPlugin('common', 'common.js')
]
}
2.Module
第一步,先引入angular ,以及相关模块,然后像es5中那样定义一个模块
app.js
import angular from 'angular';
import uirouter from 'angular-ui-router';
import ocLazyLoad from 'oclazyLoad';
angular.module('app',[ uirouter,ocLazyLoad ])
模块与模块之间引用
我们建立第二个模块 header/index.js
import angularfrom 'angular';
export default angular.module('header',[]).name
修改app.js
import header from './header'
angular.module('app',[ uirouter,ocLazyLoad , header])
模块的引用完成
3.控制器
假设在header目录下新增一个控制器
header/controller.js
export default class HeaderController {
consturctor(){
this.home = 'header'
}
}
引用控制器 修改 header/index.js
import HeaderController from './controller'
export default angular.module('header',[ ])
.controller('HeaderController',HeaderController)
.name
4.服务
如果要在控制器内使用$scope,或者其他服务肯定是报错的,那是因为我们在使用之前没有注入服务
所以第一步应该注入服务
header/controller.js
export default class HeaderController {
consturctor($scope){
this.home = 'header'
$scope.component = 'head'
}
}
HeaderController.$inject = ['$scope']
那么如何自定义服务呢?
新建 header.server.js
class HeaderServices {
constructor(){
this.name = 'cxh'
}
getName(){
return this.name
}
}
header/index.js
import HeaderService from './service';
export default angular.module('header',[ ])
.controller('HeaderController',HeaderController)
.service('HeaderService',HeaderService)
.name
在控制器中使用自定义服务
header/controller.js
export default class HeaderController {
consturctor($scope,HeaderService){
this.home = 'header'
$scope.component = 'head'
$scope.name = HeaderService.getName
}
}
HeaderController.$inject = ['$scope','HeaderService']
5.指令
新建 footer/index.js 大致和 header/index.js相同
将 footer模块 引入到 app.js
新建footer/directive.js
export default class Footer {
constructor(){
this.restrict = 'E',
this.scope = {},
this.template = "<div ng-click='alert()'>footer</div>"
this.controller = Foot
this.link = (scope, element, attr) => {}
}
}
class Foot{
constructor(){
$scope.alert = () => { alert(1) }
}
}
Header.$inject = ['$scope']
footer/index.js
export default angular.module('footer',[])
.directive('footerDirective',()=> new Footer)
.name
6.路由
router.js
export default router ($stateProvider, $urlRouterProvider) {
$stateProvider.state("home",{
url:"/home",
templateUrl:'app/home/home.html',
controller: "HomeController",
controllerAs:"HMC",
})
$urlRouterProvider.otherwise('/home');
}
router.$inject = [ '$stateProvider', '$urlRouterProvider']
DEMO 实现动态加载
1.第一步,新建app.js创建一个module
import angular from 'angular';
import uirouter from 'angular-ui-router';
import ocLazyLoad from 'oclazyLoad';
//引用创建头部 组件
import Header from './header';
//路由
import routing from "./router.js";
//引入两个子模块
import Home from "./homes";
import Router from "./router";
angular.module('app',[uirouter, Header, ocLazyLoad, Home, Router])
.config(routing)
2.配置路由 ./route.js
export default function routing($stateProvider, $urlRouterProvider) {
'ngInject'; //注入服务 就不需要使用$inject了
$stateProvider
.state("home",{
url:"/home",
templateProvider: ($q) => { //动态引入html模板
'ngInject';
let deferred = $q.defer();
require.ensure([], function () {
let template = require('./home/home.html');
deferred.resolve(template);
});
return deferred.promise;
},
controller: "HomeController",
controllerAs:"HMC",
resolve: { //动态加载模块
loadMyCtrl: function ($q, $ocLazyLoad) {
'ngInject';
let deferred = $q.defer();
require.ensure([], () => {
let module = require("./home").default;
$ocLazyLoad.load({name: module.name});
deferred.resolve(module.controller)
});
return deferred.promise;
}
}
}),
.state("route",{
url:"/route",
templateProvider: ($q) => { //动态引入html模板
'ngInject';
let deferred = $q.defer();
require.ensure([], function () {
let template = require('./router/router.html');
deferred.resolve(template);
});
return deferred.promise;
},
controller: "routerController",
controllerAs:"RTC",
resolve: { //动态加载模块
loadMyCtrl: function ($q, $ocLazyLoad) {
'ngInject';
let deferred = $q.defer();
require.ensure([], () => {
let module = require("./router").default;
$ocLazyLoad.load({name: module.name});
deferred.resolve(module.controller)
});
return deferred.promise;
}
}
})
$urlRouterProvider.otherwise('/home');
}
3.header
header/index.js
import angular from "angular";
import header from './directive';
export default angular.module('app_header',[])
.directive('header', () => new header)
.name;
header/directive.js
class Header {
constructor($scope){
'ngInject';
$scope.isshow = false;
}
}
export default class header {
constructor() {
this.restrict = 'E',
this.scope = {},
this.template = require(./header.html)
this.controller = Header
this.link = (scope, element, attr) => {}
}
}
header/header.html
<div> <a href="#home" rel="external nofollow" >home</a> <a href="#router" rel="external nofollow" >router</a> </div>
4.home
home/index.js
import angular from "angular";
import HomeController from './controller';
export default angular.module('app_home',[])
.controller('HomeController', HomeController)
home/controller.js
export default class HomeController {
constructor($scope) {
'ngInject';
this.isshow = false;
this.eage = 'sds';
$scope.edg = 'sma'
}
change(){
this.isshow = !this.isshow;
console.log(this.isshow);
}
}
home/home.html
<div>home {{HMC.eage}} -- {{edg}}</div>
其余的模块大同小异就不依依去写了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angular
# es6
# webpack
# angular1
# 详解webpack+es6+angular1.x项目构建
# es6+angular1.X+webpack 实现按路由功能打包项目的示例
# 加载
# 就不
# 自定义
# 的人
# 要在
# 第二个
# 写了
# 大同小异
# 报错
# 或者其他
# 那是因为
# 如何使用
# 创建一个
# 大家多多
# 器中
# 目录下
# html
# raw
# exclude
# node_modules
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php 三元运算符实例详细介绍
Laravel如何使用查询构建器?(Query Builder高级用法)
大连网站制作公司哪家好一点,大连买房网站哪个好?
开心动漫网站制作软件下载,十分开心动画为何停播?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
高防服务器租用首荐平台,企业级优惠套餐快速部署
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
网站图片在线制作软件,怎么在图片上做链接?
打造顶配客厅影院,这份100寸电视推荐名单请查收
长沙做网站要多少钱,长沙国安网络怎么样?
详解Android中Activity的四大启动模式实验简述
如何在Tomcat中配置并部署网站项目?
网站制作软件有哪些,制图软件有哪些?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
如何在阿里云虚拟服务器快速搭建网站?
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
Laravel如何使用Blade模板引擎?(完整语法和示例)
如何快速生成高效建站系统源代码?
如何彻底删除建站之星生成的Banner?
如何在阿里云购买域名并搭建网站?
如何有效防御Web建站篡改攻击?
Java垃圾回收器的方法和原理总结
使用豆包 AI 辅助进行简单网页 HTML 结构设计
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
在centOS 7安装mysql 5.7的详细教程
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
Laravel如何实现本地化和多语言支持?(i18n教程)
Python文件流缓冲机制_IO性能解析【教程】
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
成都网站制作公司哪家好,四川省职工服务网是做什么用?
MySQL查询结果复制到新表的方法(更新、插入)
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
详解jQuery停止动画——stop()方法的使用
LinuxShell函数封装方法_脚本复用设计思路【教程】
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何挑选优质建站一级代理提升网站排名?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
如何自定义建站之星网站的导航菜单样式?
Python3.6正式版新特性预览

