今天我们学习一下angular的另一个几乎被忽略的模块angular-require

先给出链接地址(git:)   https://github.com/Treri/angular-require/

Usage

  1. load angular-require.js before your app's init function. You can load it using require.js or just write in html.
  2. include ngRequire in your angular app's dependence.
  3. 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的作用)的更多相关文章

  1. Angular.JS + Require.JS + angular-async-loader 来实现异步加载 angular 模块

    传统的 angular 应用不支持异步加载模块,必须在 module 启动的时候,所有模块必须预加载进来. 通过使用 angular-async-loader 库,我们可以使用 requirejs 等 ...

  2. <5>Lua多返回值和require模块

    1.多返回值 --1: 一个lua函数可以返回多个返回值: --2: 定义多个变量来接受多返回值 --3: lua的unpack函数,解开表里的单个的值; 结果 2.require模块 --1: 第一 ...

  3. plv8 require 模块试用

    plv8 是postgres 的一个比较强大的插件,社区有人基于babel,browserify 实现了一个方便的require 模块加载 实际上官方也有介绍过了类似的基于数据库存储js,然后通过ev ...

  4. Angular pagination分页模块 只提供分页参数处理 不处理分页记录数据

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. require模块开发(一)

    1.require下载和加载 1.1 下载 工欲善其事必先利其器,先下载require.js下载地址, 然后添加 require.js 到 scripts 目录 1.2 加载 然后加载require ...

  6. Node.js require 模块加载原理 All In One

    Node.js require 模块加载原理 All In One require 加载模块,搜索路径 "use strict"; /** * * @author xgqfrms ...

  7. Angular中ngCookies模块介绍

    1.Cookie介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短 ...

  8. 使用angular.bootstrap() 完成模块的手动加载

    之前我们看到使用ng-app指令,可以实现模块的自动加载.现在我们看下,angular中如何手动加载模块.需要使用到angular.bootstrap这个函数. <html> <he ...

  9. Angular JS的模块依赖

    AngularJS是纯客户端技术,完全用Javascript编写的.它使用的是网页开发的常规技术(HTML,CSS,Javascript),目的是让网页应用开发更快更容易. AngularJS简化应用 ...

随机推荐

  1. Pytorch入门笔记

    import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): #nn. ...

  2. 【MySQL】Error 1264: out of range value for column

    此问题是插入的整型数字超出了范围. 比如设置表格的数据类型:cust_fax integer(10) not null 当插入以下数字的时候会抛出标题所说的错误: insert into databa ...

  3. Find the odd int

    Given an array, find the int that appears an odd number of times. There will always be only one inte ...

  4. LeetCode OJ:Maximal Rectangle(最大矩形)

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...

  5. bfs+状态压缩dp

    题目连接 题解 : 对两两管道进行bfs,然后用dp[i][j] 来表示在i状态下通过了前j个管道 参考博客 #include<bits/stdc++.h> using namespace ...

  6. 20165202 2017-2018-2《Java程序设计》课程总结

    每周作业链接汇总 ++预备作业一:我期待的师生关系++ ++预备作业二:学习基础和C语言基础调查++ ++预备作业三:linux安装及学习++ ++第一周作业:初识JAVA,注册码云并配置Git++ ...

  7. Python中字符的练习

    一.重复的单词:此处认为分隔符为空格:个整数-]): list.append(random.randint(, ))for i in list: d[i]=list.count(i)print d

  8. MPAndroidChart Wiki(译文)~Part 1

    1. 基础入门 1.1 添加依赖 Gradle 工程添加依赖 (推荐使用) 项目级build.gradle中添加: allprojects { repositories { maven { url & ...

  9. D3.js 使用心得

    教程 D3.js 入门教程系列 http://www.ourd3js.com/wordpress/296/ 全球地图数据

  10. 利用层序遍历(含空节点)和中序遍历重建二叉树 python

    给定一颗二叉树的层序遍历(不含None的形式)和中序遍历序列,利用两个序列完成对二叉树的重建. 还是通过一个例子来说明整个过程,下图所示的二叉树,层序遍历结果为[a,b,c,d,e],中序遍历结果为[ ...