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简化应用 ...
随机推荐
- iptables详解(7):iptables扩展之udp扩展与icmp扩展
前文中总结了iptables的tcp扩展模块,此处,我们来总结一下另外两个跟协议有关的常用的扩展模块,udp扩展与icmp扩展. udp扩展 我们先来说说udp扩展模块,这个扩展模块中能用的匹配条件比 ...
- my.cnf 参数说明
[mysql] prompt="\\u@\\h:\p \\R:\\m:\\s [\\d]>" The prompt command reconfigures the de ...
- LeetCode OJ:Implement Stack using Queues(队列实现栈)
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- 在QT中使用静态对象
最近做教研室的项目,需要只能存在一个接收数据的线程,那么我就想把这个线程设置成一个静态对象.但是在connect信号与槽的时候出了一点问题,最后搞好了,现在这mark一下: 比如说一个声明了一个静态的 ...
- 一道简单的JavaScript面试题
好久没更新博客了,随便写点东西吧. 自从工作之后就特别忙,忙的过程中有时候挺迷茫的,可能是大多数时候写的都是简单的业务代码,很久没好好充电了.最近一直在零碎的上班路上等电梯时间里面学习<图解HT ...
- Talk to customer about the trouble with wireless failure connection。
It’s upset for me... 1 ATemel Studio61 and MKII program failure. Notes: The Flash file : A 90 is w ...
- 控制图片在latex中的位置
如何做到自己控制图片在latex中的位置? 方法:在 \begin{figure} 后面加参数 [h!] 即 \begin{figure}[h!] % Requires \usepackage{gra ...
- console 代理
window.log = function(){ if(!window.console ){ return; } var arr = [].slice.call(arguments); arr.uns ...
- flowable IdmEngine和IdmEngineConfiguration
IdmEngineConfiguration 继承了 AbstractEngineConfiguration. 一.创建EngineConfiguration实例 IdmEngineConfigura ...
- softmax的多分类
关于多分类 我们常见的逻辑回归.SVM等常用于解决二分类问题,对于多分类问题,比如识别手写数字,它就需要10个分类,同样也可以用逻辑回归或SVM,只是需要多个二分类来组成多分类,但这里讨论另外一种方式 ...