首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用Webpack、组件和OclazyLoad使用ui-router加载组件

如何使用Webpack、组件和OclazyLoad使用ui-router加载组件
EN

Stack Overflow用户
提问于 2016-11-03 22:46:38
回答 1查看 1.8K关注 0票数 2

我目前正在尝试使用带有angular组件和ui的OcLazyLoad -router 1.0.0和Webpack 1。

但是我不知道如何正确地使用带有ui-view="MainView"ui-view="rightMenuView"的views对象来显示html视图。其次,我想直接加载组件,而不是templateProvider、控制器等(位于ui路由器中)。我看了很多教程和现有的项目,但我没有找到这个用例的任何示例。

下面是我的一些代码片段:

webpack.config.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.......
.......
.......
module: {
        loaders: [{
            test: /\.json$/,
            exclude: /node_modules/,
            loaders: ["raw-loader"]
        },{
            test: /\.html$/,
            exclude: /node_modules/,
            loader: 'ngtemplate!html'
        },{
            test: /\.(jpe?g|gif|png|svg|woff|woff2|ttf|eot|wav|mp3)$/,
            loader: 'file' // inline base64 URLs for <=10kb images, direct URLs for the rest
        },{
            test: /\.less$/,
            exclude: /node_modules/,
            loaders: ['style', 'css', 'less?sourceMap', 'resolve-url']
        },{
            test: /\.scss$|\.css$/,
            exclude: /node_modules/,
            loaders: ['style', 'css-loader', 'resolve-url', 'sass?sourceMap']
        },{
            test: /\.js$/,
            exclude: /node_modules/,
            loaders: ['ng-annotate?add=true&map=true', 'babel', 'eslint-loader']
        }]
    },
......
......
......

然后这是我的page1.component.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Page1View from './page1.html';
import './page1.scss';

class Page1 {
    static detailsComponent() {
        return {
            templateUrl: Page1View,
            controller: function () {
                this.name = 'Hello Page1';
            }
        };
    }
}

export default Page1.detailsComponent();

然后是模块page1.module.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Page1Component from 'components/page1/page1.component';
const PAGE1MODULE = 'page1';

angular.module(PAGE1MODULE, [])
.component('page1', Page1Component);

export default PAGE1MODULE;

然后是路由器(ui- config.js ):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.....
.....
$stateProvider
    .state('home', {
        url: '/home',
        views: {
            mainView: {
                component: 'home'
            },
            rightMenuView: {
                component: 'rightMenu'
            }
        }
    })

    .state('page1', {
        url: '/page1',
        views: {
            mainView: {
                templateProvider: ($q) => {
                    return $q((resolve) => {
                        // lazy load the view
                        require.ensure([], () => resolve(require("./components/page1/page1.html")));
                    });
                },
                controller: function () {
                    this.name = 'Hello Page1';
                }
            },
            rightMenuView: {
                templateProvider: ($q) => {
                    return $q((resolve) => {
                        // lazy load the view
                        require.ensure([], () => resolve(require("./components/rightMenu/rightMenu.html")));
                    });
                }
            }
        },
        resolve: {
            loadPage1Component: ($q, $ocLazyLoad) => {
                return $q((resolve) => {
                    require.ensure([], () => {
                        // load whole module
                        let module = require('./components/page1/page1.module');
                        $ocLazyLoad.load({name: 'page1'});
                        resolve(module.component);
                    });
                });
            }
        }
    })

正如你所看到的,我在没有component: 'page1'的情况下重写了代码,因为如果我没有加载component page1,我不知道怎么做。如果你看到更好的方法,我会听你的。主要的问题是templateProvider中的模板没有显示。我只看到URL。我一定要在Webpack中以特定的方式使用angular的templateCache吗?提前谢谢你。

顺便说一下:这是视图Page1:

也是Webpack建筑的一部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
....
....
chunk    {1} 1.bundle.js, 1.bundle.js.map 3.52 kB {0} [rendered]
   [20] ./~/css-loader!./~/resolve-url-loader!./~/sass-loader?sourceMap!./lib/components/page1/page1.scss 196 bytes {1} [built]
   [23] ./lib/components/page1/page1.html 271 bytes {1} {2} [built]
   [83] ./lib/components/page1/page1.component.js 1.39 kB {1} [built]
   [84] ./lib/components/page1/page1.module.js 408 bytes {1} [built]
  [133] ./lib/components/page1/page1.scss 1.25 kB {1} [built]
chunk    {2} 2.bundle.js, 2.bundle.js.map 271 bytes {0} [rendered]
   [23] ./lib/components/page1/page1.html 271 bytes {1} {2} [built]
....
....

我看了两次page1.html,我不知道如何避免这个问题,但我猜它似乎没有阻塞。

最后,这是我的package.json,也许这可能会有用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  "name": "",
  "version": "",
  "description":"",
  "main": "index.js",
  "scripts": {
    "prod": "rm -rf dist/* && cross-env NODE_ENV=production webpack --config webpack.prod.config.js",
    "dev": "cross-env NODE_ENV=development webpack-dev-server --config webpack.dev.config.js"
  },
  "dependencies": {
    "angular": "1.5.8",
    "angular-animate": "1.5.8",
    "angular-bootstrap-material": "0.1.4",
    "angular-loading-bar": "0.9.0",
    "angular-messages": "1.5.8",
    "angular-sanitize": "1.5.8",
    "angular-translate": "2.12.1",
    "angular-translate-loader-static-files": "2.12.1",
    "angular-ui-bootstrap": "2.2.0",
    "angular-ui-router": "1.0.0-beta.2",
    "angular-ui-router-anim-in-out": "1.0.2",
    "bootstrap": "3.3.7",
    "bootstrap-material-design": "0.5.10",
    "bootstrap-material-design-icons": "2.2.0",
    "cross-env": "3.1.3",
    "http-server": "0.9.0",
    "oclazyload": "^1.0.9",
    "rx": "4.1.0",
    "rx-angular": "1.1.3"
  },
  "devDependencies": {
    "angular-mocks": "1.5.8",
    "autoprefixer": "6.5.1",
    "babel-core": "6.17.0",
    "babel-loader": "6.2.5",
    "babel-plugin-transform-runtime": "6.15.0",
    "babel-polyfill": "6.16.0",
    "babel-preset-es2015": "6.16.0",
    "babel-runtime": "6.11.6",
    "css-loader": "0.25.0",
    "eslint": "3.8.1",
    "eslint-config-xo": "0.17.0",
    "eslint-loader": "1.6.0",
    "extract-text-webpack-plugin": "1.0.1",
    "file-loader": "0.9.0",
    "html-loader": "0.4.4",
    "html-webpack-plugin": "2.24.0",
    "image-webpack-loader": "3.0.0",
    "imagemin-webpack-plugin": "1.2.1",
    "isparta-loader": "2.0.0",
    "jasmine-core": "2.5.2",
    "karma": "1.3.0",
    "karma-coverage": "1.1.1",
    "karma-jasmine": "1.0.2",
    "karma-phantomjs-launcher": "1.0.2",
    "karma-sourcemap-loader": "0.3.7",
    "karma-spec-reporter": "0.0.26",
    "karma-webpack": "1.8.0",
    "less": "2.7.1",
    "less-loader": "2.2.3",
    "ng-annotate-loader": "0.2.0",
    "ng-annotate-webpack-plugin": "0.1.3",
    "ngtemplate-loader": "1.3.1",
    "node-sass": "3.10.1",
    "optimize-css-assets-webpack-plugin": "1.3.0",
    "path": "0.12.7",
    "postcss-loader": "1.0.0",
    "progress-bar-webpack-plugin": "1.9.0",
    "protractor": "4.0.9",
    "raw-loader": "0.5.1",
    "resolve-url-loader": "1.6.0",
    "sass-lint": "1.9.1",
    "sass-loader": "4.0.2",
    "sasslint-webpack-plugin": "1.0.4",
    "style-loader": "0.13.1",
    "url-loader": "0.5.7",
    "watch-ignore-webpack-plugin": "1.0.0",
    "webpack": "1.13.2",
    "webpack-dev-server": "1.16.2"
  }
}
EN

回答 1

Stack Overflow用户

发布于 2016-11-07 07:11:00

请参考我的github projectDemo。这可能会解决你的问题。

简而言之,以下方法用于延迟加载

parent.config.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function configure($stateProvider) {
    $stateProvider.state("lazyChild", {
        lazyLoad: loadLazyState(function (resolve, $ocLazyLoad) {
            require.ensure([], function () {
                let lazyModule = require('./lazy-child/lazy-child.module');
                resolveLazyState(lazyModule, resolve, $ocLazyLoad);
        }, "lazyChild");
    });
})

util.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function loadLazyState(callback) {
    return (transition) => {
        let injector = transition.injector();
        let $ocLazyLoad = injector.get('$ocLazyLoad');
        let $q: IQService = injector.get('$q');
        return $q((resolve) => callback(resolve, $ocLazyLoad));
    };
}

export function resolveLazyState(lazyModule) {
    if (lazyModule && lazyModule.default) {
        $ocLazyLoad.load({ name: lazyModule.default });
        resolve(lazyModule);
    }
}

lazy-child.module.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lazyChildComponent from './lazy-child.component';
import lazyChildConfig from './lazy-child.config';

const lazyChild = module('lazy-child', [])
    .component('lazyChildComponent', lazyChildComponent)
    .config(lazyChildConfig)
    .name;

export default lazyChild;

lazy-child.config.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function configure($stateProvider) {
    $stateProvider.state("lazyChild",{
        parent: "lazyParent",
        component: "lazyChildComponent",
    });
}

export default configure;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40412500

复制
相关文章
ui-router中使用ocLazyLoad和resolve
1.AngularJS按需加载 AngularJS主要应用开发SPA(Single Page Application)项目,所以在小型项目中,services、filters和controllers都在index.html中加载。Google给的AngularJS官方的angular-seed和angular-phonecat都是这样。 对于复杂一点,大型的项目,如果所有的内容一开始就加载,对首页的性能影响比较大,即使静态javascript文件使用CDN,对性能还是有很大的影响。所有需要引入按需加载机制,
八哥
2018/01/18
1.6K0
ui-router中使用ocLazyLoad和resolve
使用webpack和rollup打包组件库
之前做了一个loading的样式组件,为了实现代码的可重用性,将这个小项目打包并且发布在了npm上。在一次次的打包发包过程中经历了一个又一个报错,@buzuosheng/loading这个组件已经到了2.7.0版本,虽然还有一些要调整的地方,但总算是可以用了。
不作声
2021/03/05
1.1K0
使用webpack和rollup打包组件库
Webpack插件按需加载组件_webpack懒加载
学习Vue的时候,各类教程都会告诉我们:Vue 的特点是SPA——Single Page Application(单页应用程序)。它有着诸如:“只有第一次会加载页面, 以后的每次页面切换,只需要进行组件替换;减少了请求体积,加快页面响应速度,降低了对服务器的压力” 等等优点。
全栈程序员站长
2022/11/08
1.5K0
Webpack插件按需加载组件_webpack懒加载
Vue 08.webpack中使用.vue组件
注意:不能使用npm下载,需要从 github 上下载现成的包并解压,然后拷贝到项目中使用
LittlePanger
2020/04/14
1.1K0
Vue 组件注册:基本使用和组件嵌套
除了前面介绍的基本语法之外,Vue.js 还支持通过组件构建复杂的功能模块,组件可以称得上是 Vue.js 的灵魂,是 Vue.js 框架提供的最强大的功能之一。
学院君
2023/03/03
1.7K0
Vue 组件注册:基本使用和组件嵌套
如何使用Vue封装组件[通俗易懂]
想封装组件呢首先要思考: 1.你想向用户暴露哪些属性 (props) 2.你想向用户暴露哪些事件,让用户监听来处理后续的业务 ($emit,@) 3.你想让用户嵌入哪些自定义的内容(slot)
全栈程序员站长
2022/11/09
1.7K0
关于在reactjs项目中如何用webpack配置组件按需加载
在使用 import {Button} from 'antd' 的时候 打开控制台,会出现这样的警告 You are using a whole package of antd, please use https://www.npmjs.com/package/babel-plugin-import to reduce app bundle size. 实际我们在用antd的时候,只需要一个Button组件,它给完全加载进项目了,要知道antd 8W多行代码,执行完之后得花一些时间吧. 于是官方就提供了下面
杭州前端工程师
2018/06/15
9480
VueJs中如何使用Teleport组件
在DOM结构相对比较复杂,层级嵌套比较深的组件内,需要根据相对应的模块业务处理一些逻辑,该逻辑属于当前组件
itclanCoder
2023/02/26
2.4K0
VueJs中如何使用Teleport组件
如何使用小程序媒体组件
图片,视频,音乐是小程序使用中不可缺少的部分,这篇文章中,我们将介绍小程序媒体组件的使用。媒体组件分为audio音频组件,image图像组件,video视频组件,camera相机组件以及live-player、live-pusher小程序直播组件。其中直播权限需要相关资质的账号才能开通,本文暂不做介绍。其他组件我们将会以Hello World的demo形式做介绍。
a563831029
2018/11/07
4.9K0
如何使用小程序媒体组件
如何使用小程序表单组件
上一篇文章中,我们给大家介绍了小程序的视图容器及基础内容组件,该组件主要应用是输出内容。接下来这篇文章中,我们将继续介绍小程序最常用的表单组件,该组件主要应用是获取输入内容。表单组件分为11个组件,我们将对这11个组件使用做详细的介绍。
此昵称已隐藏_
2018/11/06
5.2K0
VUE组件封装_vue使用组件
组件化就是将一个页面拆分成一个个小的功能模块,每个功能模块完成属于自己这部分独立的功能,使得整个页面的管理和维护变得非常容易。
全栈程序员站长
2022/11/09
1.9K0
VUE组件封装_vue使用组件
vue项目中 页面组件懒加载 使用webpackChunkNmae
component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
拿我格子衫来
2022/01/24
4400
JsChart组件使用
JsChart是什么? JSChart能够在网页上生成图标,常用于统计信息,十分好用的一个JS组件。 使用JsChart 一。导入jscharts.js 二。编写jscharts.jsp测试页面 1.下载JScharts库 从官网下载JScharts库,我们使用的是压缩包里面的jscharts.js文件。它大约150KB。 使用JScharts库 在网页文件(如.html或.jsp)包含JScharts库。 <script type="text/javascript" src="js/jscharts.js
Java3y
2018/03/15
2.1K0
Eureka组件使用
创建一个eureka模块,加入依赖,配置application.yml,启动类添加@EnableEurekaServer
蚊子.
2023/08/10
2020
Eureka组件使用
webpack性能优化(1):分隔/分包/异步加载+组件与路由懒加载
webpack ensure相信大家都听过。有人称它为异步加载,也有人说做代码切割,那这个家伙到底是用来干嘛的?其实说白了,它就是把js模块给独立导出一个.js文件的,然后使用这个模块的时候,webpack会构造script dom元素,由浏览器发起异步请求这个js文件。
周陆军博客
2023/03/18
1.3K0
VueCli脚手架(二)组件如何使用,如何在一个组件里面使用另一个组件
之前已经创建了项目,项目一启动,就会走main.js 这个文件 因为main.js 这个里面已经引入了App.vue组件,那么就会展示这个App.vue里面的东西
一写代码就开心
2021/01/05
1.1K0
VueCli脚手架(二)组件如何使用,如何在一个组件里面使用另一个组件
Vue 组件(一):组件的基本使用
组件实际上是可以复用的 Vue 实例,它们与 new Vue 接收相同的选项,例如 data、computed、methods 以及生命周期钩子等。 何谓复用?如果把页面看作是组件的容器,那么导航栏、搜索框其实都是可以复用的组件。作为对可重用代码的封装,它们自身具有独立的数据和逻辑。
Chor
2019/11/07
1K0
如何使用小程序视图容器组件
在上一篇文章中,我们介绍了小程序入门开发的基础步骤,并通过几个Hello Word例子,让大家体验了下小程序的组件及API使用,接下来的教程中,我们将教大家详细使用每个组件及API的使用。
宮園薰
2018/11/05
9.6K0
如何使用小程序视图容器组件
如何在Swing组件中使用HTML
许多Swing组件在其GUI中显示文本字符串。默认情况下,组件的文本以一种字体和颜色显示,并且全部显示在一行上。 可以分别通过调用组件的setFont和setForeground方法来确定组件文本的字体和颜色。例如,以下代码创建一个标签,然后设置其字体和颜色:
JavaEdge
2021/02/22
2.5K0
如何在Swing组件中使用HTML
如何使用基于组件的设计方法
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具。 基于组件的设计方法通常在大型复杂的设计项目中才会谈论到。在这篇文章中,我们将说明的是,它对于小型项目和团队来说也是非常有益的。无论项目大小,运用这个方法,设计效果都是立竿见影的。 首先,我们要向布拉德弗罗斯特先生致敬,他写下了关于原子设计的书籍。他在书中表明了对于设计的想法:不管是在设计网页或者应用程序,实际上我们是在构建一个设计系统。 然而,我们发现这个关于原子设计的隐喻使不少用户感到困惑。特别是
奔跑的小鹿
2018/03/16
1.6K0
如何使用基于组件的设计方法

相似问题

使用Webpack和ocLazyLoad进行代码拆分/延迟加载

13

用ocLazyLoad插件加载组件和其他依赖项

13

使用Webpack动态加载Vuejs组件

12

LitElement和Webpack -如何加载web组件?

18

使用webpack从MDL加载特定组件

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文