一周总结

总结

这几天在做一个菜单系统,要求可定制化,做的过程中遇到了不少问题,特来总结一下。

因为样式是可定制的,所以就需要动态加载。

//动态加载css,js
var dynamicLoading = {
    css: function(path){
		if(!path || path.length === 0){
			throw new Error('argument "path" is required !');
		}
		var head = document.getElementsByTagName('head')[0];
        var link = document.createElement('link');
        link.href = path;
        link.rel = 'stylesheet';
        link.type = 'text/css';
        head.appendChild(link);
    },
    js: function(path){
		if(!path || path.length === 0){
			throw new Error('argument "path" is required !');
		}
		var head = document.getElementsByTagName('head')[0];
        var script = document.createElement('script');
        script.src = path;
        script.type = 'text/javascript';
        head.appendChild(script);
    }
}

//menu_theme表示页面风格
switch(menu_theme) {
	case "ACE风格":
		dynamicLoading.css("assets/css/boss_ace.css");
		break;
	case "888首页风格":
		//加载888首页风格样式
		dynamicLoading.css("assets/css/metro.css");
		break;
	default:
		dynamicLoading.css("assets/css/boss_ace.css");
}

因为菜单是动态拉取数据显示出来的,还需要权限控制,因为需要两个post请求。之前我是先等第一次请求success之后再请求权限,这样就会比较慢。 angular有个$q.all,then的用法,可以将两个请求异步的进行

$q.all([
	$http.post(url,data).success(function() {

	}),
	$http.post(auth_url,data).success(function() {

	}),
]).then(function() {
	
});

权限控制这一块需要对比两个数组,取相同的部分,开始用的是双重循环,这样效率比较低

Array.prototype.in_array = function(e) { 
	for(i = 0;i < this.length;i++) { 
		if(this[i] == e) return true; 
	} 
	return false; 
}

var powers = result.data.powers;
var newZnodes = new Array();
for(var i = 0;i < zNodes.length;i++) {
	var flag = powers.in_array(zNodes[i].access);
	if(flag) {
		newZnodes.push(zNodes[i]);
	}
}

后面就又想着将其中一个数组变为字符串,用字符串的indexOf方法进行查找

var newZnodes = new Array();
for(var i = 0;i < zNodes.length;i++) {
	var val = zNodes[i].access;
	if(powers.indexOf(val) != -1) {
		newZnodes.push(zNodes[i]);
	}
}