angular的require模块的使用($requireProvider的作用)
今天我们学习一下angular的另一个几乎被忽略的模块angular-require
先给出链接地址(git:) https://github.com/Treri/angular-require/
Usage
- load angular-require.js before your app's init function. You can load it using require.js or just write in html.
- include ngRequire in your angular app's dependence.
- Done.(引入js文件,注入依赖)
angular.module('app', ['ngRequire', 'ui.router'])
.config(...)
好了我这里就讲讲在一个项目中,我们是如何使用的
(1) 一个项目通常会有一个start.js作为启动js,它的作用是引入各种库文件(第三方js,插件),并且了我们通常使用require.js作为加载工具。
Em:
try {
require.config({
baseUrl: "js",
paths: {
'angular': '../lib/angular',
'ui-router': '../lib/angular-ui-router',
'jquery': '../lib/jquery',
'lodash': '../lib/lodash',
'ng-bootstrap': '../lib/ui-bootstrap-tpls-1.3.2',
'angular-locale_zh-cn': "../lib/angular-locale_zh-cn",
'webupload': '../lib/webuploader',
'rap': "../lib/ngrap",
'nganimate': '../lib/angular-animate',
'kindeditor-all': '../lib/kindeditor/kindeditor-all',
'zh-cn': '../lib/kindeditor/lang/zh-CN',
'pingpp': '../lib/pingpp',
'echarts': '../lib/echarts',
'thenjs': '../lib/then',
'map_china': '../lib/echarts/map/china',
"ng-require": '../lib/angular-require'
},
shim: {
'angular': {
exports: 'angular',
deps: ['jquery']
},
'zh-cn': {
deps: 'kindeditor-all'
},
'ui-router': {
deps: ['angular']
},
'angular-locale_zh-cn': {
deps: ['angular'],
deos:['ng-bootstrap']
},
'ng-bootstrap': {
deps: ['angular']
},
'rap': {
deps: ['angular']
},
'nganimate': {
deps: ['angular']
},
'ng-require': {
deps: ["angular"]
}
},
waitSeconds: 15
});
require(['angular', 'env', 'app', 'router', 'ctrl/header','ctrl/rootctrl'], function (angular, env) {
if (env == "dev") {
document.domain = "localhost";
}
angular.bootstrap(document, ['myapp']);
});
} catch (e) {
window.location.href = "/ie8check/ie8.html";
}
关于如何使用require.js,这里不做重点,你可以参考。RequireJS官网,或者
http://www.cnblogs.com/evaling/p/6722760.html
http://www.cnblogs.com/evaling/p/6722980.html
(2)此外在一个项目里,我们通常会有一个app.js文件,这个文件我们会建立一个主模块(angular的module)
Em:
define(['angular','ng-require','rap','ng-bootstrap','ui-router'], function (angular) {
var myapp = angular.module('myapp', ['ui.router', 'ui.bootstrap', 'ngRap','ngRequire']); myapp.config(['$httpProvider', 'ngRapProvider', function (httpProvider, ngRapProvider) {
//ngRapProvider.script = ' http://rap.taobao.org/rap.plugin.js?projectId=2188'; // replce your host and project id
//ngRapProvider.enable({
// mode:0,
// domain:['http://10.0.3.217','http://dev.greatipr.com','http://localhost']
//});
//httpProvider.interceptors.push('rapMockInterceptor');
}]);
return myapp;
});
(3)前面两步,我只是讲述如何在项目中引入ng-require
此时来讲讲ng-require有啥作用?
打个比喻,加入在一个项目中,我们有多个tab切换(tab都对应着不同内容),因此在切换tab时候,势必会造成数据的变化。
此时有两种不同的解决方案:
方法一:每一个tab都对应着不同的路由,不同的控制器(彼此是分开的文件)ideas_first_ctrl,ideas_allIdeas_ctrl,ideas_myIdeas_ctrl是三个不同的文件相互独立的
define(['app'], function (myapp) { myapp.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$requireProvider',
function ($stateProvider, $urlRouterProvider, $locationProvider, $requireProvider) {
$urlRouterProvider.otherwise('home.ideas');
$stateProvider.state('home.ideas', {//创意列表(全部创意)
url: '/ideasList',
views: {
"content": {
templateUrl: 'tpls/ideas/list.html',
controller:"ideas_first_ctrl"
}
}
})
.state('home.ideas.allIdeas', {//全部创意
// url: '/allIdeas/:user_right',
url:'/allIdeas',
views: {
"part": {
templateUrl: 'tpls/ideas/all_idea_list.html',
controller:'ideas_allIdeas_ctrl'
}
}
})
.state('home.ideas.myIdeas', {//我的创意
//url: '/myIdeas/:user_right',
url:'/myIdeas',
views: {
"part": {
templateUrl: 'tpls/ideas/myIdeas.html',
controller:'ideas_myIdeas_ctrl'
}
}
})
方法二:每个tab也是对应着不同的路由,不同的控制器,但是我们把控制器可以写在同一个文件(这样写的好处,可以解决一些异步加载的坑)
define(['app'], function (myapp) {
myapp.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$requireProvider',
function ($stateProvider, $urlRouterProvider, $locationProvider, $requireProvider) {
$stateProvider.state('learn.document', {
url: '/document',
views: {
'module': {
templateUrl: 'tpls/platforms/learn/module.html',
resolve: {//
deps: $requireProvider.requireJS([
'ctrl/learn/document'
])
}
}
}
})
.state('learn.document.list', {
url: '/list',
views: {
'content': {
templateUrl: 'tpls/platforms/learn/document/list.html',
controller: 'learn_document_ctrl'
}
}
})
.state('learn.document.edit', {
url: '/edit?docid',
views: {
'content': {
templateUrl: 'tpls/platforms/learn/document/edit.html',
controller: 'learn_document_edit_ctrl'
}
}
})
}
]);
});
而此时ctrl/learn/document中我们写着两个不同的控制器,对应不同的tab.
define(['app', 'api/learn_api','directives/kindeditor/kindeditor','services/myalert/myalert'], function (myapp) {
myapp.controller('learn_document_ctrl', ['$scope', 'learn_api', function (s, learn_api){
}
}])
myapp.controller('learn_document_edit_ctrl', ['$scope','learn_api','$state','myalert',
function(){
}]
tpls/platforms/learn/module.html
<div ui-view="content"></div>
angular的require模块的使用($requireProvider的作用)的更多相关文章
- Angular.JS + Require.JS + angular-async-loader 来实现异步加载 angular 模块
传统的 angular 应用不支持异步加载模块,必须在 module 启动的时候,所有模块必须预加载进来. 通过使用 angular-async-loader 库,我们可以使用 requirejs 等 ...
- <5>Lua多返回值和require模块
1.多返回值 --1: 一个lua函数可以返回多个返回值: --2: 定义多个变量来接受多返回值 --3: lua的unpack函数,解开表里的单个的值; 结果 2.require模块 --1: 第一 ...
- plv8 require 模块试用
plv8 是postgres 的一个比较强大的插件,社区有人基于babel,browserify 实现了一个方便的require 模块加载 实际上官方也有介绍过了类似的基于数据库存储js,然后通过ev ...
- Angular pagination分页模块 只提供分页参数处理 不处理分页记录数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- require模块开发(一)
1.require下载和加载 1.1 下载 工欲善其事必先利其器,先下载require.js下载地址, 然后添加 require.js 到 scripts 目录 1.2 加载 然后加载require ...
- Node.js require 模块加载原理 All In One
Node.js require 模块加载原理 All In One require 加载模块,搜索路径 "use strict"; /** * * @author xgqfrms ...
- Angular中ngCookies模块介绍
1.Cookie介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短 ...
- 使用angular.bootstrap() 完成模块的手动加载
之前我们看到使用ng-app指令,可以实现模块的自动加载.现在我们看下,angular中如何手动加载模块.需要使用到angular.bootstrap这个函数. <html> <he ...
- Angular JS的模块依赖
AngularJS是纯客户端技术,完全用Javascript编写的.它使用的是网页开发的常规技术(HTML,CSS,Javascript),目的是让网页应用开发更快更容易. AngularJS简化应用 ...
随机推荐
- 关闭多个screen
由于开了很多个screen同时工作,关闭是一个一个比较麻烦,写个命令在这以便日后想不起来时可以用到. 1.先看看有多少个screen screen -ls |awk '/Socket/'|awk ...
- linux下鼠标穿透和取消穿透--linux小白,大神无视
最近在用qt写一个跨平台的软件,因为设置了无边框,并且我自己给程序窗口加了阴影,阴影范围又比较大 所以必须给阴影区域加上鼠标穿透才能有更好的体验. 上网查了一下,在windows下使用SetWindo ...
- GPON命令模式
1.添加ont步骤 1.1 查看自动发现的ONT,并记录SN号和PON口 MA5680T(config)#display ont autofind all --------------------- ...
- 五.dbms_transaction(用于在过程,函数,和包中执行SQL事务处理语句.)
1.概述 作用:用于在过程,函数,和包中执行SQL事务处理语句. 2.包的组成 1).read_only说明:用于开始只读事务,其作用与SQL语句SET TRANSACTION READ ONLY完全 ...
- expdp/impdp 详细参数解释
任意可以使用expdp/impdp的环境,都可以通过help=y看到帮助文档. 1.expdp参数说明 2.impdp参数说明 3.expdp参数说明(中文) 4.impdp参数说明(中文) expd ...
- SQL 按照多个字段为标准的重复数据处理
表结构:T1 id int Uncheckedname nchar(10) Checkedvalue nchar(10) Checked 数据: 1 a a1 2 a a1 3 b b1 4 b b2 ...
- 【HTML5】使用 JavaScript 来获取电池状态(Battery Status API)
HTML5 规范已经越来越成熟,可以让你访问更多来自设备的信息,其中包括最近提交的 "Battery Status API".如其名称所示,该 API 允许你通过 JavaScri ...
- 第1课:接口测试和jmeter总结
接口测试 1. 接口的分类:webService和http api接口 1) webService接口:是按照soap协议通过http传输,请求报文和返回报文都是xml格式,一般要借助工具来测试接口: ...
- Express 开发与部署最佳实践 -- 待续
链接 nginx 代理缓存 压缩 等 全部采用异步 使用try catch 处理同步异常 promise 处理异步 异常, 而不是使用 domains 或者 uncaughtExceptio ...
- java正则匹配多个子字符串样例
文本内容: 上海市黄浦区瑞典江苏省无锡市广东省深圳市南山区 我希望分别将字符串中的省份,城市名,城区名匹配出来,如匹配不出来就默认放在省份中. public static HashMap<Str ...