angular 路由是我在工作中体验非常便捷的一点,
这是详细的API ,查看API 可以了解很多东西,
https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-view
下面是我使用angular ui-route 做到 开发例子,代码都未压缩可以方便查看,
http://heboliufengjie.github.io/appRoute/#/index
https://github.com/heboliufengjie/appRoute
公司项目例子(运用的技术点比较有讲究,仔细参考)
http://kam.ichinascope.com/#/index
涉及到,
1、angular 路由配置,路由传参,controller中使用$stateParams获取参数,
2、使用angular 内置$http 发送ajax 请求及传参
3、angular 指令包装 第三方库的使用、
4、angular 简洁的启动方式之一(推荐使用,可以不再html 页面添加 ng-app)
5、click 巧妙的避开浏览器因为安全限制打开新页面
6、与 lodah.js 配合使用处理一些字符串,数组等常见数据操作
(function() {
'use strict';
var index = angular.module('index', ['ui.router']);
console.log('publicUrl', publicUrl)
index.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/index'); //找到相应路由调到制定的路由页面
$stateProvider.state('index', { //首页
url: '/index?day&keywords',
views: {
'': { //模板页面
templateUrl: publicUrl + '/views/index/home.html',
},
'head@index': { //head@index 表示渲染index.html 中相应的 ui-view="head"
templateUrl: publicUrl + '/views/common/head.html',
},
'footer@index': { //同上
templateUrl: publicUrl + '/views/common/footer.html',
},
'main@index': {
templateUrl: publicUrl + '/views/index/index.main.html',
controller: 'indexCtrl' //定义首页控制器
},
}
})
});
var shuffle = function(inputArr) {
var valArr = [],
k = '';
for (k in inputArr) { // Get key and value arrays
if (inputArr.hasOwnProperty(k)) {
valArr.push(inputArr[k]);
}
}
valArr.sort(function() {
return 0.5 - Math.random();
});
return valArr;
}
var isPc = function() {
var userAgentInfo = navigator.userAgent;
var Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"
];
var flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
index.controller('indexCtrl', function($scope, $stateParams, $http, $location, $state, $interval) {
//判断是手机还是电脑
$scope.isPc = isPc();
$scope.login_state = (login_state * 1); // 0 为未登陆
$scope.account_url = account_url;
$scope.userinfo = userinfo;
$scope.publicUrl = publicUrl;
//搜索
$scope.search = function() {
var keywords = _.trim($scope.keywords);
if (!keywords) {
return false;
} else {
if (!$scope.login_state) {
$scope.showDialog = true;
return
}
location.href = '/heatmap?keywords=' + keywords;
}
};
//热词推荐
var getHotword = function() {
$http.get('/api/news/hotword', { cache: true }).success(function(response) {
//debug
if (false) {
response = [
'养老概念板测试测试测试测试测试',
'军工概念板',
'次新股概念板',
'二胎概念板',
'稀土永磁概念板',
'商业百货概念板',
'智慧城市概念板'
];
}
$scope.recommends = response.slice(0, 6);
});
};
getHotword();
$scope.recommendedHotWords = function(recommend) {
if (!$scope.login_state) {
$scope.showDialog = true;
return
}
var w = window.open();
w.location = '/heatmap?keywords=' + recommend + '&needSearch=0';
}
// $scope.updateRecommend = function() {
// console.log('换一批请求')
// }
//近期热点事件
var getRecentHotSpots = function() {
$scope.currentDay = $stateParams.day || 1;
$http.get('/apihot/news/topic/new_spots2?day=' + $scope.currentDay, { cache: true })
.success(function(response) {
if (response.code === 200) {
$scope.selectDays = [1, 2, 3];
var resultRecentHotSpots = response.message;
resultRecentHotSpots[0].new = true;
resultRecentHotSpots[1].new = true;
resultRecentHotSpots = shuffle(resultRecentHotSpots);
//debug
if (false) {
$scope.selectDays = [1, 2, 3];
resultRecentHotSpots = [
'养老概念板测试测试测试测试测试',
'军工概念板',
'次新股概念板',
'二胎概念板',
'稀土永磁概念板',
'商业百货概念板',
'OLED概念板',
'智慧城市概念板',
'医药概念板',
'集成电路概念板',
'金融IC卡概念板',
'3D打印概念板',
'石墨烯概念板',
'彩票概念板',
'云计算概念板',
'食品安全检测概念板',
'体育概念板',
'车联网概念板',
'IP概念板',
'全息手机概念板',
'美丽中国概念板',
];
}
//热点事件闪烁图
var resultRecentHotSpotsLeft = [],
resultRecentHotSpotsRight = [];
_.each(resultRecentHotSpots, function(value, i) {
if (i % 2) {
resultRecentHotSpotsRight.push(value);
} else {
resultRecentHotSpotsLeft.push(value);
}
});
//
$scope.MobileResultRecentHotSpots = resultRecentHotSpots;
$scope.resultRecentHotSpots = {
resultRecentHotSpotsRights: resultRecentHotSpotsRight.slice(0, 7),
resultRecentHotSpotsLefts: resultRecentHotSpotsLeft.slice(0, 6),
}
}
});
};
getRecentHotSpots();
$scope.selectDate = function(arg) {
$scope.showList = false;
$state.go('index', {
day: arg
});
};
//$interval.cancel(stop);关闭定时刷新
$interval(getRecentHotSpots, 1000 * 5 * 60);
$scope.hotEvents = function(arg) {
if (!$scope.login_state) {
$scope.showDialog = true;
return
}
var w = window.open();
w.location = '/heatmap?keywords=' + arg + '&needSearch=0';
}
//热门SAM行业
var getIndustryData = function() {
$http.get('/api/news/itcc', { cache: true })
.then(function(response) {
//debug
if (false) {
response = {
"资本市场服务1111": [{
"t": "002673_SZ_EQ",
"c": "西部证券1",
"s": 1
}, {
"t": "601788_SH_EQ",
"c": "光大证券2",
"s": 2
}, {
"t": "600369_SH_EQ",
"c": "西南证券3",
"s": 3
}, {
"t": "600999_SH_EQ",
"c": "招商证券4",
"s": 4
}, {
"t": "601377_SH_EQ",
"c": "兴业证券6",
"s": 6
}, {
"t": "600109_SH_EQ",
"c": "国金证券5",
"s": 5
}, {
"t": "600109_SH_EQ",
"c": "国金证券5",
"s": 100
}],
"互联网软件与服务222": [{
"t": "300017_SZ_EQ",
"c": "网宿科技",
"s": 4
}, {
"t": "300051_SZ_EQ",
"c": "三五互联",
"s": 1
}, {
"t": "300383_SZ_EQ",
"c": "光环新网",
"s": 1
}, {
"t": "300494_SZ_EQ",
"c": "盛天网络",
"s": 3
}, {
"t": "002354_SZ_EQ",
"c": "天神娱乐",
"s": 2
}, {
"t": "300431_SZ_EQ",
"c": "暴风科技",
"s": 4
}],
"汽车3333": [{
"t": "600066_SH_EQ",
"c": "宇通客车",
"s": 3
}, {
"t": "603766_SH_EQ",
"c": "隆鑫通用",
"s": 3
}, {
"t": "601777_SH_EQ",
"c": "力帆股份",
"s": 2
}, {
"t": "000957_SZ_EQ",
"c": "中通客车",
"s": 3
}, {
"t": "000550_SZ_EQ",
"c": "江铃汽车",
"s": 2
}, {
"t": "600006_SH_EQ",
"c": "东风汽车",
"s": 1
}],
"东": [{
"t": "600066_SH_EQ",
"c": "宇通",
"s": 3
}, {
"t": "603766_SH_EQ",
"c": "通用",
"s": 3
}, {
"t": "601777_SH_EQ",
"c": "股份",
"s": 2
}, {
"t": "000957_SZ_EQ",
"c": "中车",
"s": 3
}]
}
}
var companys = [],
industryNames = [],
sortBys;
_.each(response.data, function(n, k) {
industryNames.push(k);
sortBys = _.sortByOrder(n.slice(0, 6), ['s'], ['desc']);
_.each(sortBys, function(v) {
v.t = (v.t).substring(0, (v.t).indexOf('_'));
})
companys.push(sortBys);
})
//
var IndustryDatas = [];
var newCompanys = companys.slice(0, 3);
var newIndustryNames = industryNames.slice(0, 3);
IndustryDatas[0] = {
industryName: newIndustryNames[0],
companys: newCompanys[0]
}
IndustryDatas[1] = {
industryName: newIndustryNames[1],
companys: newCompanys[1]
}
IndustryDatas[2] = {
industryName: newIndustryNames[2],
companys: newCompanys[2]
}
$scope.IndustryDatas = IndustryDatas;
//获取列表股票代码
var IndustryCompanys = _.flatten(_.pluck(IndustryDatas, 'companys'), true);
var IndustryCompanysCodes = _.pluck(IndustryCompanys, 't').join(',');
$http.get('/hqservice/stock/realtime/quotes?codes=' + IndustryCompanysCodes, { cache: true })
.then(function(response) {
if (response.data.code == 200) {
_.merge(IndustryCompanys, response.data.message);
}
}, function(response) {
console.log('error')
})
}, function(response) {
console.log('error')
});
};
getIndustryData();
// 热点概念板 stock
var getStockData = function() {
$http.get('/apihot/news/topic/hot_topic_company', { cache: true }) // /api/news/conp/com
.success(function(response) {
if (response.code === 200) {
$scope.StockDatas = response.message;
//获取列表股票代码
var StockCompanys = _.flatten(_.pluck(response.message, 'companys'), true);
var StockCompanyssCodes = _.pluck(StockCompanys, 't').join(',');
$http.get('/hqservice/stock/realtime/quotes?codes=' + StockCompanyssCodes, { cache: true })
.then(function(response) {
if (response.data.code == 200) {
_.merge(StockCompanys, response.data.message);
}
})
}
})
}
getStockData();
//今日版块排行打开新页面
$scope.companyKeywords = function(company) {
if (!$scope.login_state) {
$scope.showDialog = true;
return
}
var w = window.open();
w.location = '/heatmap?keywords=' + (company && company.c ? company.c : company) + '&needSearch=0';
}
});
index.directive('alert', function() {
return {
link: function(scope) {
if (document.addEventListener) {
scope.showAlert = false;
} else {
scope.showAlert = true;
}
}
};
});
index.directive('searchTip', function() {
return {
link: function(scope, element) {
var input = document.getElementById('search-tip');
new Awesomplete(input, {
minChars: 1,
list: [
"抗癌概念板",
"金融软件概念板",
"蓝宝石概念板",
"新能源概念板",
"家电行业概念板",
"消费金融概念板",
"福建自贸区概念板",
"智能家居概念板",
"5G概念板",
"安防概念板",
"网红概念板",
"乙肝疫苗概念板",
"中国电子集团概念板",
"pokemon go概念板",
"振兴东北概念板",
"玩具制造概念板",
"在线教育概念板"
]
});
window.addEventListener("awesomplete-selectcomplete", function() {
element.on("keyup", function() {
//scope.keywords = _.trim(this.value);
//scope.$apply();
location.href = '/heatmap?keywords=' + _.trim(this.value);
})
}, false);
}
};
});
//dialog
index.directive('dialog', function() {
return {
link: function(scope) {
//点击取消关掉弹窗
document.getElementById('operation-button').children[1].onclick = function() {
scope.showDialog = false;
scope.$apply()
}
}
};
});
angular.bootstrap(document, ['index']);
})()