1 /**     根据参数定制表格
* api接口:
* form-model:[item1,item2,item3]
* form-properties:[
* {key:'',label:'',thClass:''}, key为item对象的key,label为该key对应的表头,thClass主要用于列少时平分一行
* ...
* ]
* 对应一行后面的编辑,删除,详情按钮
* form-actions:{
* edit/delete/detail:{
* stateUrl:'', 对应点击该按钮后跳转的路由状态
* stateParams:[{
* key:'', 用来拼接ui-router的sref-->({key:object.objectKey}),支持多参数传递。
* objectKey:'',
* }]
* }
* }
*示例
* <by-table tb-models="formModel" tb-properties="formProperties" tb-actions="formAction"></by-table>
*
*
* model用于初始表格数据
$scope.formModel = [
{id:1,name:"张三",sex:'男'},
{id:2,name:"李四",sex:'男'},
{id:3,name:"王五",sex:'男'}
]; thClass 主要用于珊格布局,控制其长度
$scope.formProperties = [
{key:'id',label:'ID'},
{key:'name',label:'姓名','thClass':'col-md-3'},
{key:'sex',label:'性别','thClass':'col-md-3'}
] 配合而ui-route 完成到增删改查的路由跳转
$scope.formAction = {
//stateParams:
//stateUrl({key:object.objectKey});
//add 不需要stateUrl
detail:{
stateUrl:'person.detail',
stateParams:{
key:'id',
objectKey:'id'
}
},
edit:{
stateUrl:'person.edit'
},
delete:{
stateUrl:'person.delete'
}
}
*/ angular.module('testApp')
.directive('byTable', function(){
return{
restrict: 'E',
templateUrl:'scripts/components/form/form-template/table.html',
scope:{
tbModels:'=',
tbProperties:'=',
tbActions:'='
},
link:function ($scope,$elem,$attr){
$scope.hasOper = false;
var notNull = function (data){
return !!data;
} //private action info
$scope._tbActions = {
detail:null,
delete:null,
edit:null
} // 必须传递一个数组
//输入[{key1,value1},{key2,value2}],
//输出key1:value1,key2:value2
var getParams = function(datas){
console.log("....");
var arr_len = datas.length;
var res = "";
var i=0;
if(arr_len<=0){
return "";
} res = datas[0].key +":tbModel." + datas[0].objectKey;
if(arr_len>1){
for(i=1;i<arr_len;i++){
res += (","+datas[i].key +":tbModel." + datas[i].objectKey);
}
}
return res;
} //get sref str by config
var getSref = function(dataObj){
var params = "";
var strtmp = "";
if(!dataObj.stateUrl){
return "";
}
if(dataObj.stateParams){
var tmp = getParams(dataObj.stateParams);
params = "({"+ tmp +"})";
}
strtmp = dataObj.stateUrl+ params;
return strtmp;
} //initOperContain:'edit','delete','detail'
var initOper = function(){
if($scope.tbActions.detail){
$scope._tbActions.detail = getSref($scope.tbActions.detail)
}
if($scope.tbActions.edit){
$scope._tbActions.edit = getSref($scope.tbActions.edit)
}
if($scope.tbActions.delete){
$scope._tbActions.delete = getSref($scope.tbActions.delete)
}
console.log($scope._tbActions.detail);
}
initOper(); //the oper is show?
if(notNull($scope.tbActions.edit)||notNull($scope.tbActions.delete)||notNull($scope.tbActions.detail)){
$scope.hasOper = true;
}
}
}
})

基于angularJs+ui-router+bootstrap风格的表格生成指令的更多相关文章

  1. [转]AngularJS+UI Router(1) 多步表单

    本文转自:https://www.zybuluo.com/dreamapplehappy/note/54448 多步表单的实现   在线demo演示地址https://rawgit.com/dream ...

  2. angularJS ui router 多视图单独刷新问题

    场景:视图层级如下 view1 --view11 --view111 需求:view11的一个动作过后,单独刷新view12 解决方式:修改层级设计 view1 --view11 --view111 ...

  3. Angularjs ui router,路由嵌套 父controller执行问题

    解决方式来源:https://stackoverflow.com/questions/25316591/angularjs-ui-router-state-reload-child-state-onl ...

  4. 【Bootstrap】 bootstrap-table表格组件

    [Bootstrap-table] 顾名思义,这个组件专注于bootstrap风格的表格的设计,并且提供了很多表格的基础和进阶的功能,给我们开发前端的表格省下很多力气. 本文主要参考这位博主的系列文章 ...

  5. AngularJS 使用 UI Router 实现表单向导

    Today we will be using AngularJS and the great UI Router and the Angular ngAnimate module to create ...

  6. [转]AngularJS 使用 UI Router 实现表单向导

    本文转自:http://www.oschina.net/translate/angularjs-multi-step-form-using-ui-router 今天我们将使用AngularJs和伟大的 ...

  7. Blazor组件提交全记录: FullScreen 全屏按钮/全屏服务 (BootstrapBlazor - Bootstrap 风格的 Blazor UI 组件库)

    Blazor 简介 Blazor 是一个使用 .NET 生成的交互式客户端 Web UI 的框架.和前端同学所熟知的 Vue.React.Angular 有巨大差异. 其最大的特色是使用 C# 代码( ...

  8. 自己写的基于bootstrap风格的弹框插件

    自己写的一款基于bootstrap风格的弹框插件,暂时只有确认框.提示框.后续功能扩展.bug修改再更新. ;(function($){ //默认参数 var PARAMS; var DEFAULTP ...

  9. bootstrap基础学习小记(二)排版、列表、代码风格、表格

    排版——标题.副标题.段落(正文文本).强调内容.粗体.斜体.强调相关的类.文本对齐 <!DOCTYPE HTML> <html> <head> <meta ...

随机推荐

  1. hive 权限:Authorization failed:No privilege 'Create' found for outputs .

    创建表报错: create table test ( name string ); Authorization failed:No privilege 'Create' found for outpu ...

  2. MySQL乱码问题及字符集实战

    mysql> create database oldboy;Query OK, 1 row affected (0.01 sec) mysql> mysql> mysql> s ...

  3. Oracle的导出和导入

    (摘自:http://www.cnblogs.com/mchina/archive/2012/09/12/2678093.html) 数据库的备份操作是在整个项目运行中最重要的工作之一. 一.数据的导 ...

  4. flask 项目 部署服务器,package安装问题(无外网链接)

    1.安装所需的环境/包 1) 在一台开发机器(有网络,编译成功)安装package: pipreqs 语法: pipreqs <项目路径> 将项目所使用的所有包目录将会导出至目录:requ ...

  5. shell编程实例2

    1.vim  read_PERSON.sh 2. #!/bin/bash echo "What is your name?" read PERSON echo "Hell ...

  6. Tiny4412 Android5.0 定制:编译生成img后如何删除原厂的apk

    在android-5.0.2/build/core/Makefile的315行可以看到,这里是apk生成签名相关的地方. 315 name := $(TARGET_PRODUCT) 316 ifeq ...

  7. c++指针初探

    业余时间准备重温一下c++,因为在阅读Android源码到native层的时候感觉有点吃力,只是在大学时候很不用心的学过c++,所以重温下以便打好一些编程基础知识,本篇就很简单的对c++的指针做初步的 ...

  8. ArcGIS Runtime SDK for WPF之SimpleRenderer无法添加、报错“图形符号无法序列化为 JSON”

    ArcGIS Runtime SDK for WPF之SimpleRenderer无法添加.报错“图形符号无法序列化为 JSON” 在上一篇博文中如果在 esri:Map 里面是否设置了的UseAcc ...

  9. 《DSP using MATLAB》示例Example7.21

    代码: h = [1, 2, 3, 4, 3, 2, 1]/15; M = length(h); n = 0:M-1; [Hr, w, a, L] = Hr_Type1(h); a L amax = ...

  10. 实体对象,List泛型 转换为DataTable

    /// <summary>        /// 实体对象转换DataTable        /// </summary>        /// <param name ...