简介: 本篇博客是在学习AngularJS自定义控件的学习记录,作为一个学习示例...

A-基本架构介绍

新建一个AngularJs的项目,大概项目结构如下:

项目结构:

  大概是由:app.js,bootstrap.js,app-routes.js,config.json,common-config.json等主要文件组成。

  app.js--当做项目的起始文件吧,里面会包含:注入的其他JS模块,过滤设置,配置文件的设置等。

define(function (require, exports, module) {
var angular = require('angular');
var asyncLoader = require('angular-async-loader'); require('angular-ui-router');
require('angular-seagull2-common');
require('angular-seagull2-oauth');
require('angular-seagull2-workflow');
require('angular-seagull2-infrastructure');
require('angular-indentity-code');
require('angular-seagull2-empprovider');
require('angular-seagull2-careerdev');
require('angular-seagull2-corporation'); var app = angular.module('app', [
'ui.router',
'angular-seagull2-common',
'angular-seagull2-workflow-oauth',
'angular-seagull2-workflow',
'angular-seagull2-infrastructure',
'angular-datepicker',
'angular-indentity-code',
'angular-seagull2-empprovider',
'angular-seagull2-careerdev',
'angular-seagull2-corporation']); //常规金额:由于angular默认的金额格式如果是负数的话显示格式为(12,345.00),使用customCurrency替换成:-12,345.00
app.filter('customCurrency', ["$filter", function ($filter)
{
return function (amount, currencySymbol)
{
var currency = $filter('currency'); if (amount < 0)
{
return currency(amount, currencySymbol).replace("(", "-").replace(")", "");
} return currency(amount, currencySymbol);
};
}]); //将阿拉伯数字转化为中文大写
app.filter('cnuppercase', ["$filter", function ($filter)
{
return function(n)
{
if (n === '' || n === '0' || n === 0)
{
return "";
}
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))
{
return "";
} var unit = "千百拾亿千百拾万千百拾元角分", str = "";
n += "00";
var p = n.indexOf('.');
if (p >= 0)
n = n.substring(0, p) + n.substr(p + 1, 2);
unit = unit.substr(unit.length - n.length);
for (var i = 0; i < n.length; i++)
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
return str.replace(/零(千|百|拾|角)/g, "零")
.replace(/(零)+/g, "零")
.replace(/零(万|亿|元)/g, "$1")
.replace(/(亿)万|壹(拾)/g, "$1$2")
.replace(/^元零?|零分/g, "")
.replace(/元$/g, "元整");
};
}]);
////格式化字符串
//var template1 = "我是{0},今年{1}了";
//var template2 = "我是{name},今年{age}了";
//var result1 = template1.format("loogn", 22);
//var result2 = template2.format({ name: "loogn", age: 22 });
//两个结果都是"我是loogn,今年22了"
String.prototype.format = function (args)
{
var result = this;
if (arguments.length > 0)
{
if (arguments.length == 1 && typeof (args) == "object")
{
for (var key in args)
{
if (args[key] != undefined)
{
var reg = new RegExp("({" + key + "})", "g");
result = result.replace(reg, args[key]);
}
}
} else
{
for (var i = 0; i < arguments.length; i++)
{
if (arguments[i] != undefined)
{
var reg = new RegExp("({[" + i + "]})", "g");
result = result.replace(reg, arguments[i]);
}
}
}
}
return result;
}; var commonConfig = require('text!../common-config.json');
var config = require('text!../config.json');
app.config(['configureProvider', function (configureProvider)
{
configureProvider.configure(commonConfig);
configureProvider.configure(config);
}]);
asyncLoader.configure(app);
module.exports = app;
});

bootstrap.js--理解成包管理文件,其中有包的文件地址和包的依赖关系等。

require.config({
map: {
'*': {
'ie8css': 'https://develop-cdn.sinooceangroup.com/libs/requirecss-branch-seagull2/1.1.0/ie8css.min.js',
'css': 'https://develop-cdn.sinooceangroup.com/libs/requirecss-branch-seagull2/1.1.0/css.min.js'
}
},
waitSeconds: 0,
//配置angular的路径
paths: {
'angular': 'https://develop-cdn.sinooceangroup.com/libs/angular/1.2.27/angular.min',
'angular-cookies': 'https://develop-cdn.sinooceangroup.com/libs/angular/1.2.27/angular-cookies.min'
},
//这个配置是你在引入依赖的时候的包名
shim: {
'text': { exports: 'text' },
'angular': { exports: 'angular' },
'angular-cookies': { exports: 'angular-cookies', deps: ['angular'] },
'angular-ui-router': { deps: ['angular'] },
'angular-ui-tree': { deps: ['angular', 'css!https://develop-cdn.sinooceangroup.com/libs/angular-ui-tree/2.15.0/dist/angular-ui-tree.min'] },
'angular-datepicker': { deps: ['angular', 'css!https://develop-cdn.sinooceangroup.com/libs/datepicker-branch-seagull2/1.0.5/datepicker-branch-seagull2'] },
'angular-seagull2-common': {
deps: [
'angular',
'urijs/uri',
'angular-ui-tree',
'css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common',
'ie8css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common.ie8']
}
}
}); require(['angular', 'webuploader',
'./javascript/app-routes'],
function (angular, webuploader) {
angular.element(document).ready(function () {
angular.bootstrap(document, ['app']);
angular.element(document).find('html').addClass('ng-app');
});
window.WebUploader = webuploader;
});

app-routes.js--理解为路由器,是配置页面,JS控制器管理,及参数传递及登录验证等的地方。

define(function (require)
{
var app = require('../javascript/app'); app.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider)
{
var csspathBase = "https://develop-cdn.sinooceangroup.com/libs/seagull2-workflow-responsive/1.0.3"; //招聘申请-前置页面
$stateProvider.state('recruitRquestFontpage', {
url: '/recruitRquestFontpage',
templateUrl: './views/recruitRequest/recruitRquestFontPage.html',
controller: 'fontPage-controller',
controllerUrl: './javascript/controllers/recruitRequest/fontPage-controller.js',
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
});
//招聘申请
$stateProvider.state('RecruitRequest', {
url: '/RecruitRequest',
useWorkflow: true,
workflowUrlBase: '/RecruitRequestWf',
workflowScene: {
'Draft': {
templateUrl: './views/recruitRequest/list.html',
controller: 'list-controller',
controllerUrl: './javascript/controllers/recruitRequest/list-controller.js'
},
'Approval': {
templateUrl: './views/recruitRequest/list.html',
controller: 'list-controller',
controllerUrl: './javascript/controllers/recruitRequest/list-controller.js'
},
'ReadOnly': {
templateUrl: './views/recruitRequest/list.html',
controller: 'list-controller',
controllerUrl: './javascript/controllers/recruitRequest/list-controller.js'
}
},
startupWorkflow: true,
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
}); //自定义控件测试
$stateProvider.state('test', {
url: '/test',
templateUrl: './views/test/test.html',
controller: 'test_controller',
controllerUrl: './javascript/controllers/test/test-controller.js',
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
}); //职位状态更新-前置页面
$stateProvider.state('JobPostStateMaintainList', {
url: '/JobPostStateMaintainList',
templateUrl: './views/JobPostStateMaintain/list.html',
controller: 'list-controller',
controllerUrl: './javascript/controllers/JobPostStateMaintain/list-controller.js',
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
});
//职位状态更新
$stateProvider.state('JobPostStateMaintain', {
url: '/JobPostStateMaintain',
useWorkflow: true,
workflowUrlBase: '/JobPostStateMaintain',
workflowScene: {
'Draft': {
templateUrl: './views/JobPostStateMaintain/edit.html',
controller: 'edit-controller',
controllerUrl: './javascript/controllers/JobPostStateMaintain/edit-controller.js'
},
'ReadOnly': {
templateUrl: './views/JobPostStateMaintain/edit.html',
controller: 'edit-controller',
controllerUrl: './javascript/controllers/JobPostStateMaintain/edit-controller.js'
}
},
startupWorkflow: true,
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
});
//消息通知
$stateProvider.state('Notify', {
url: '/Notify?taskID',
templateUrl: './views/notify/notify-dialog.html',
controller: 'notify-dialog-controller',
controllerUrl: './javascript/controllers/notify/notify-dialog-controller.js',
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
});
//录用洽谈-查看
$stateProvider.state('EmployeExecuteView', {
url: '/EmployeExecuteView?id&taskID',
templateUrl: './views/EmployeExecute/employed-discuss-view.html',
controller: 'employed-discuss-view-controller',
controllerUrl: './javascript/controllers/EmployeExecute/employed-discuss-view-controller.js',
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
});
//录用洽谈
$stateProvider.state('EmployeExecute', {
url: '/EmployeExecute',
useWorkflow: true,
workflowUrlBase: '/EmployeExecuteWf',
workflowScene: {
'Draft': {
templateUrl: './views/EmployeExecute/employed-discuss.html',
controller: 'employed-discuss-controller',
controllerUrl: './javascript/controllers/EmployeExecute/employed-discuss-controller.js'
},
'GeneratedNotice': {
templateUrl: './views/EmployeExecute/employed-discuss.html',
controller: 'employed-discuss-controller',
controllerUrl: './javascript/controllers/EmployeExecute/employed-discuss-controller.js'
},
'BackgroundCheck': {
templateUrl: './views/EmployeExecute/employed-discuss.html',
controller: 'employed-discuss-controller',
controllerUrl: './javascript/controllers/EmployeExecute/employed-discuss-controller.js'
},
'ReadOnly': {
templateUrl: './views/EmployeExecute/employed-discuss.html',
controller: 'employed-discuss-controller',
controllerUrl: './javascript/controllers/EmployeExecute/employed-discuss-controller.js'
}
},
startupWorkflow: true,
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
}); //内部推荐-前置页面
$stateProvider.state('InternalRecommendRequestList', {
url: '/InternalRecommendRequestList',
templateUrl: './views/InternalRecommendRequest/list.html',
controller: 'list-controller',
controllerUrl: './javascript/controllers/InternalRecommendRequest/list-controller.js',
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
});
//内部推荐更新
$stateProvider.state('InternalRecommendRequest', {
url: '/InternalRecommendRequest',
useWorkflow: true,
workflowUrlBase: '/InternalRecommendRequest',
workflowScene: {
'Draft': {
templateUrl: './views/InternalRecommendRequest/edit.html',
controller: 'edit-controller',
controllerUrl: './javascript/controllers/InternalRecommendRequest/edit-controller.js'
},
'ReadOnly': {
templateUrl: './views/InternalRecommendRequest/edit.html',
controller: 'edit-controller',
controllerUrl: './javascript/controllers/InternalRecommendRequest/readonly-controller.js'
}
},
startupWorkflow: true,
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
}); //面试阶段管理
$stateProvider.state('InterviewManage', {
url: '/InterviewManage',
useWorkflow: true,
workflowUrlBase: '/InterviewManageWf',
workflowScene: {
'Draft': {
templateUrl: './views/InterviewManage/list.html',
controller: 'list-controller',
controllerUrl: './javascript/controllers/InterviewManage/list-controller.js'
},
'ReadOnly': {
templateUrl: './views/InterviewManage/edit.html',
controller: 'edit-controller',
controllerUrl: './javascript/InterviewManage/JobPostStateMaintain/edit-controller.js'
}
},
startupWorkflow: true,
requiredLogin: true,
dependencies: ['css!' + csspathBase + '/form', 'ie8css!' + csspathBase + '/form_ie8']
});
}]);
});

config.json,common-config.json  配置文件--里面配置了一些常用数据(登录地址,参数等),是在app.js中加入了配置才起的作用,

var commonConfig = require('text!../common-config.json');
var config = require('text!../config.json');
app.config(['configureProvider', function (configureProvider)
{
configureProvider.configure(commonConfig);
configureProvider.configure(config);
}]);
asyncLoader.configure(app);
module.exports = app;

B-自定义控件示例:

我的自定义控件文件为:angular-seagull2-empprovider.js

注意:

b1:  $ResumeSrummaryDirective  标记的名字要大小保持一致;

b2:  angular.module("angular-seagull2-empprovider.resume-srummary" 要和module.directive('resumeSrummary', $ResumeSrummaryDirective);

b3:  需要注意的是参数中:scope: { resumeCode: '=resumeCode' },   不仅可以传入字符串,还可以传输对象和回调方法,当然对象和回调方法需要在主页面定义好。

如:

scope: { resumeCode: '=resumeCode',data:'=data',rollback:'=roolback' }

<interview-arrangement-evaluate resume-code="item.code" data="datarollback="rollback"></interview-arrangement-evaluate>

要遵从驼峰命名规范,首字母小写。

//简历评价
(function (window, angular) {
'use strict';
$ResumeSrummaryDirective.$inject = ['$http', 'seagull2Url', 'wfWaiting', 'sogModal', 'sogValidator', 'ValidateHelper', 'IndentityCodeHelper', 'regionType']; function $ResumeSrummaryDirective($http, seagull2Url, wfWaiting, sogModal, sogValidator, ValidateHelper, IndentityCodeHelper, regionType) {
return {
restrict: 'E',
replace: true,
transclude: true,
scope: { resumeCode: '=resumeCode',data:'=data',rollback:'=roolback'  },
template: '<a ng-click="showResumeSrummary()" style="color:blue;margin-left:5px;float:left;cursor:pointer;"><span>面试评价</span></a>',
link: {
pre: function ($scope, $element, $attrs) {
$scope.showResumeSrummary = function () {
//简历评价事件
$http.post(seagull2Url.getPlatformUrl("/Resume/LoadResumeSrummary?code=" + $scope.resumeCode)).success(function (result) {
if (result) {
sogModal.openLayer('<div><div ng-include="\'views/common/resume-srummary-template.html\'"></div></div>', ['$scope', function ($modalScope) {
$modalScope.resumeSurmmarys = result;

//确定事件--调用回调函数
$modalScope.ok=function(){
$scope.roolback($scope.data);
                      }
//关闭按钮事件
$modalScope.close = function () {
$modalScope.closeThisDialog();
};
}], undefined, {}, undefined, undefined);
wfWaiting.hide();
}
}).error(function (err, status) {
wfWaiting.hide();
console.log(err + "||" + status);
//sogModal.openMessageDialog(status, result);
});
};
}
}
};
}
//声明模块angular-seagull2-empprovider.resume-srummary
var module = angular.module("angular-seagull2-empprovider.resume-srummary", [
'angular-seagull2-common',
'angular-seagull2-workflow']);
//创建resume-editor模块指令
module.directive('resumeSrummary', $ResumeSrummaryDirective); }(window, window.angular)); (function (angular) {
'use strict'; angular.module('angular-seagull2-empprovider', [
'angular-seagull2-empprovider.recruit-request-view',
'angular-seagull2-empprovider.ogu-unit',
'angular-seagull2-empprovider.resume-editor',
'angular-seagull2-empprovider.resume-srummary',
]);
}(window.angular));

a1-根据结构的分析,要想使该JS起作用,需要在app.js中注入该JS才行(下面只展示了关键代码):

define(function (require, exports, module) {
var angular = require('angular');
var asyncLoader = require('angular-async-loader'); require('angular-seagull2-empprovider'); var app = angular.module('app', [ 'angular-seagull2-empprovider',
]); var commonConfig = require('text!../common-config.json');
var config = require('text!../config.json');
app.config(['configureProvider', function (configureProvider)
{
configureProvider.configure(commonConfig);
configureProvider.configure(config);
}]);
asyncLoader.configure(app);
module.exports = app;
});

a2-需要在包文件管理中配置包源:

require.config({
map: {
'*': {
'ie8css': 'https://develop-cdn.sinooceangroup.com/libs/requirecss-branch-seagull2/1.1.0/ie8css.min.js',
'css': 'https://develop-cdn.sinooceangroup.com/libs/requirecss-branch-seagull2/1.1.0/css.min.js'
}
},
waitSeconds: 0,
//配置angular的路径
paths: {
'angular': 'https://develop-cdn.sinooceangroup.com/libs/angular/1.2.27/angular.min',
'angular-cookies': 'https://develop-cdn.sinooceangroup.com/libs/angular/1.2.27/angular-cookies.min',
'angular-ui-router': 'https://develop-cdn.sinooceangroup.com/libs/angular-ui-router/0.2.18/release/angular-ui-router.min',
'angular-ui-tree': 'https://develop-cdn.sinooceangroup.com/libs/angular-ui-tree/2.15.0/dist/angular-ui-tree.min',
'angular-async-loader': 'https://develop-cdn.sinooceangroup.com/libs/angular-async-loader/1.3.2/angular-async-loader.min',
'text': 'https://develop-cdn.sinooceangroup.com/libs/text/2.0.15/text.min',
'jquery': 'https://develop-cdn.sinooceangroup.com/libs/jquery/1.12.3/dist/jquery.min',
'webuploader': 'https://develop-cdn.sinooceangroup.com/libs/webuploader/0.1.8/dist/webuploader.min',
'urijs': 'https://develop-cdn.sinooceangroup.com/libs/urijs/1.17.1/src', 'angular-seagull2-common': 'https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common',
'angular-seagull2-oauth': 'https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-oauth/1.1.9/angular-seagull2-oauth',
'angular-seagull2-workflow': 'https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-workflow/1.5.1/angular-seagull2-workflow',
'angular-seagull2-infrastructure': 'https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-infrastructure/0.1.4/angular-seagull2-infrastructure',
'angular-datepicker': 'https://develop-cdn.sinooceangroup.com/libs/datepicker-branch-seagull2/1.0.5/datepicker-branch-seagull2',
'angular-seagull2-empprovider': './javascript/angular-seagull2-empprovider',
'angular-seagull2-careerdev': './javascript/angular-seagull2-careerdev',
'angular-indentity-code': './javascript/angular-indentity-code',
'angular-seagull2-corporation': './javascript/angular-seagull2-corporation'
},
//这个配置是你在引入依赖的时候的包名
shim: {
'text': { exports: 'text' },
'angular': { exports: 'angular' },
'angular-cookies': { exports: 'angular-cookies', deps: ['angular'] },
'angular-ui-router': { deps: ['angular'] },
'angular-ui-tree': { deps: ['angular', 'css!https://develop-cdn.sinooceangroup.com/libs/angular-ui-tree/2.15.0/dist/angular-ui-tree.min'] },
'angular-datepicker': { deps: ['angular', 'css!https://develop-cdn.sinooceangroup.com/libs/datepicker-branch-seagull2/1.0.5/datepicker-branch-seagull2'] },
'angular-seagull2-common': {
deps: [
'angular',
'urijs/uri',
'angular-ui-tree',
'css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common',
'ie8css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-common/1.2.1/angular-seagull2-common.ie8']
},
'angular-seagull2-oauth': {
deps: [
'angular',
'angular-cookies',
'angular-ui-router',
'urijs/uri',
'angular-seagull2-common']
}, 'angular-seagull2-empprovider': {
deps: [
'angular',
'angular-seagull2-common',
'angular-seagull2-workflow',
'css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-infrastructure/0.1.4/angular-seagull2-infrastructure',
'ie8css!https://develop-cdn.sinooceangroup.com/libs/angular-seagull2-infrastructure/0.1.4/angular-seagull2-infrastructure.ie8'
]
}

}
}); require(['angular', 'webuploader',
'./javascript/app-routes'],
function (angular, webuploader) {
angular.element(document).ready(function () {
angular.bootstrap(document, ['app']);
angular.element(document).find('html').addClass('ng-app');
});
window.WebUploader = webuploader;
});

B-自定义控件JS简单分析:

--->创建控件指令函数--->注入指令函数

C-使用示例:

重要:angularjs在使用自定义控件时,遵循“驼峰命名规范”!即由于控件自定义参数为:resumeCode,所以在使用时应为:resume-code,并将字母改为小写,值也不需要加{{}}标识

<resume-srummary resume-code="resumeCode"></resume-srummary>

D-总结--自定义控件显示内容可更改:

自定义控件模板template数据可变,可以直接使用angular语法如:{{inputName}}

在上面的自定义控件模板为:

template: '<a ng-click="showResumeSrummary()" style="color:blue;margin-left:5px;float:left;cursor:pointer;"><span>面试评价</span></a>',
改为:
template: '<a ng-click="showResumeSrummary()" style="color:blue;margin-left:5px;float:left;cursor:pointer;"><span>{{inputName}}</span></a>',
参数定义:
link: {

    pre: function ($scope, $element, $attrs)
   {
         if ($scope.inputName == null || $scope.inputName == undefined || $scope.inputName == '')
         {
                $scope.inputName = "面试评价";
         }

}

   使用方式修改为:

<resume-srummary resume-code="resumeCode" input-name="自定义文字"></resume-srummary>
ResumeSrummaryDirective

AngularJS_自定义控件_笔记1的更多相关文章

  1. AngularJs_自定义注入对象_笔记1

    A-自定义控件示例: 我的自定义控件文件为:angular-seagull2-common.js (function (window, angular) { 'use strict'; $urlPro ...

  2. NDK开发_笔记0

    自谷歌搜索退出中国以来,谷歌对全球第二大市场中国的态度一直保持冷淡.可是北京时间12月8日,谷歌2016开发者大会在北京召开,同时专门针对中国的谷歌开发者网站已经上线:https://develope ...

  3. socket通信_笔记

    (socket通信) 客户端与服务器端通信问题: 我们首先要了解一个概念性的词汇:Socket socket的英文原义是“孔”或“插座”.作为进程通信机制,取后一种意思.通常也称作“套接字”,用于描述 ...

  4. Java编程思想_笔记_第二章_一切都是对象

    第二章对于知识只是点到,会在以后章节会详细展开. 笔记的侧重会偏向记录自己知识模糊的地方.比如 xxx 很重要很难很实用,但是已经熟练使用就没有记录,而 “使用对象.成员名称来使用成员变量”,较简单而 ...

  5. 自定义控件_水平滑动的View 自定义属性

    保持饥饿,保持愚蠢,我们对待事情本来应该就是这样的 接下来我要写一个水平滑动的自写义,实现效果 水平滑动我们有很多种实现方法,recyceryView,HorizontalScrollView都可以, ...

  6. 【NLP汉语自然语言处理与实践】分词_笔记

    一.两种分词标准: 1. 粗粒度. 将词作为最小基本单位.比如:浙江大学. 主要用于自然语言处理的各种应用. 2. 细粒度. 不仅对词汇继续切分,也对词汇内部的语素进行切分.比如:浙江/大学. 主要用 ...

  7. java数据结构_笔记(4)_图

    图一.概念.图: 是一种复杂的非线性数据结构.图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为:G=(V, E)  其中: V 是顶点的有穷非空集合,E 是 V 中顶点偶对(称为边)的有穷 ...

  8. java数据结构_笔记(5)_图的算法

    图的算法 1 图的遍历图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次.遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础. 2 深度优先遍历从图中某个顶点V 出发 ...

  9. Effective C++_笔记_条款11_在operator=中处理“自我赋值”

    (整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 为什么会出现自我赋值呢?不明显的自我赋值,是“别名”带来的结果: ...

随机推荐

  1. python_flask 基础巩固 (DEBUG模式)

    默认情况下flask不会开启DEBUG模式,开启DEBUG模式后,flask会在每次保存代码的时候自动的重新载入代码,并且如果代码有错误,会在终端进行提示. 开启DEBUG模式有四种方式: 1.直接在 ...

  2. 0x66 Tarjan算法与无向图连通性(1)

    ……是什么? 给定无向连通图G=(V,E)(不一定连通); 割点:若对于x∈V,从图中删去节点x以及所有与x关联的边后,G分裂成两个或两个以上不相连的子图,则称x为G的割点. 桥(割边):若对于e∈E ...

  3. java面试一、1.1基础

    免责声明:     本文内容多来自网络文章,转载为个人收藏,分享知识,如有侵权,请联系博主进行删除. 基础篇 1.1Java基础 面向对象的特征:继承.封装和多态 三大特性是:封装,继承,多态 所谓封 ...

  4. 微信小程序——地图

    一:如何标点问题 地图模块需要用标点:官网API里面的wx.createMapContext(mapId, this)接口,且用官网Demo,小程序运行报错此时需要在wxml里面给map标签添加属性m ...

  5. nmap 介绍

    原文地址:http://drops.wooyun.org/tips/2002 原文地址:http://infotechbits.wordpress.com/2014/05/04/introductio ...

  6. ecshop自动确认收货(无其他商家)

    1.创建文件 includes/modules/auto_order_confirm.php 代码:(思路:对已经发货和已经付款的订单检索,对比发货时间与当前时间的间隔,达到设定时间则自动收货) &l ...

  7. React了解

    根据博主  http://www.ruanyifeng.com/blog/2015/03/react.html  的几个Demo(https://github.com/ruanyf/react-dem ...

  8. .Net程序员 初学Ubuntu ,配置Nignix

    1.安装VM虚拟机 2.升级VI编辑器 3.安装Nginx 4.测试localhost 5.编辑配置文件 仅仅用了记录一个过程,不会太详细 1.安装虚拟机,网上一大片,不是特别难 2.为什么要升级VI ...

  9. 【腾讯Bugly干货分享】iOS App 签名的原理

    本文来自 WeRead 团队博客: http://wereadteam.github.io/ iOS 签名机制挺复杂,各种证书,Provisioning Profile,entitlements,Ce ...

  10. Android 流媒体技术见解

    一.技术关键点 1. 音频采集:设置合理的采样参数,包括采样率.通道数.采样深度. 2. 视频采集:手机摄像头采集输出的格式(NV12/NV21/YV12),要注意相互间的转换,以及采集出来图像的方向 ...