【问题标题】:Dynamic sizing of angular/Clarity Datagrid Column Widths using Jquery - How to?使用 Jquery 动态调整角度/清晰度 Datagrid 列宽 - 如何?
【发布时间】:2018-10-02 09:09:58
【问题描述】:

我是 Angular 新手,一直在研究 Clarity 作为 UI 组件。我玩的第一件事是 Clarity 'Datagrid'。

在这里,我想制作一个通用组件,可以配置类似“columnModel”和“data”之类的东西,这两者都来自后端。 它将在角度组件结构指令(*ngFor 等)中用于显示数据网格。这是我想出的...

app.component.ts 中的定义

columnModel = [
{header:'Id',dataIndex:'id','width':50},
{header:'Name',dataIndex:'name','width':100},
]

data : [
          {id: 1, name: 'Name1',  age: 1, rem: 'aaassssssssssssss'} ,
          { id: 2, name: 'Name2', age: 1, rem: 'aaassssssssssssss'},
          { id: 3, name: 'Name3', age: 1, rem: 'aaassssssssssssss'},
]

这就是我所做的。(可能是因为对 Clarity n Angular 缺乏更好的理解)..我使用了 jQuery....

在主机组件的'ngOnInit'上,我使用jquery在每个结果行中设置'data-columns'和'data-cells'的'width'..基于上面的'colModel'..它似乎工作! !!!

jQuery 代码:

ngOnInit() {

const jqModel = this.colModel;

$(document).ready(function() {


    $(".datagrid-column").each(function(indx) {

       $(this).attr("style",function(i,v){return "max-width:" + 
                 jqcolModel[indx].width +"px;width:" + 
                               jqcolModel[indx].width+"px;"});

    });


    $(".datagrid-row-master").each(function(indx) {

       $(this).children().each(function(indx) {
           $(this).attr("style",function(i,v){return "max-width:" + 
                  jqcolModel[indx].width +"px;width:" +                  
                                         jqcolModel[indx].width+"px"});
       });

  });
}  

我向各位专家提出的问题是“这是最佳做法吗?” 或者 有没有更好的方法来实现这一点..

提前感谢您指导我。

【问题讨论】:

    标签: vmware-clarity


    【解决方案1】:

    我将把答案分成两部分。第一部分是我将如何开始构建一个可配置的数据网格,如问题中所述。第二部分纯粹是我对在 Angular 中使用 jQuery 和学习 Angular 的看法。

    第 1 部分

    清晰度数据网格是声明性的。这意味着您只声明您的用例所需的东西。例如 - 如果您需要页脚或过滤器,请按照文档中的说明添加页脚或过滤器,其余的由数据网格处理。

    在您的特定情况下,您似乎需要用于设置列宽的模型,因此我将使用 angular 提供的内置绑定,方法是声明与宽度的本机样式属性的绑定,如下所示:

    <clr-dg-column [style.width.px]="indexLookup('id')">ID</clr-dg-column>

    注意 style.width.px ... 周围的括号,它告诉 Angular 绑定到 indexLookup 函数提供的值。查找函数只是为提供的索引值减少上面提供的 columnModel。

    这是一个简单的 StackBlitz,显示了您提供的描述/代码的 poc:https://stackblitz.com/edit/clarity-dark-theme-v013-zxh5ks

    第 2 部分

    IMO - 从长远来看,只关注 Angular 会帮助自己更多。在我使用 AngularJS 应用程序的经验中,jQuery 是导致开发人员体验不佳的原因。我认为这仍然适用于使用 Angular 构建的应用程序。有 a highly upvoted SO question 关于 Thinking in AngularJS,我相信作者写的大部分内容仍然适用于 Angular,即使 Angular 和 AngularJS 的语义不同。

    在现代 Angular 框架中有很多东西需要掌握。 IMO,在尝试引入其他模块或库来解决问题之前,我会专注于易于消化的小部分并掌握它们。例如,您可以关注以下三个领域来扩展 Angular 提供的一些基本知识:

    • 数据绑定:我可以在组件或 HTMLElement 中绑定什么?它如何与@Inputs@Outputs 一起工作?绑定到动态值的效果是什么?当值发生变化时会发生什么?
    • @Inputs@Outputs:它们是什么?为什么要使用它们?
    • 组件生命周期:提供了哪些生命周期挂钩?他们什么时候被调用以及为什么?绑定到生命周期挂钩之一的常见用例有哪些?

    我不知道您是否通过Angular tutorial 工作过,但它以一口或两节的内容很容易消化的小块得到了一些答案。

    当我第一次开始将我的 AngularJS 知识应用到 Angular 时,文档起初似乎难以理解。我发现值得我花时间(经常)回到cheatsheetFundamentals/Components & Templates 并重新阅读内容,因为我越来越多地使用框架并且需要使用它提供的更多东西。当我第一次开始使用 Angular 时,我每周都会这样做几次,因为它可以帮助我提高工作效率。

    希望POC stackblitz 可以帮助您了解如何在没有 jQuery 的情况下完成您的用例(为 Clarity 数据网格动态设置列宽)。最后,我希望我从Angular docs 学习的经验可以帮助您找出学习框架的最佳方法。

    【讨论】:

    • @hippeelee...确实很好的解释...带有角度“绑定”的大开眼界...为此目的的jQuery...我已经有了 {{col.header}} 的 col 动态布局列..您提供的绑定 [style.width.px] 指导成功了...确实谢谢您..列标题似乎已经整理好了..现在动态布局数据..即,...肯定会通过您建议的链接..再次感谢您..
    • 不客气。祝你好运!如果这回答了您的问题,您能否将其标记为已接受的答案? :-)
    • @hippeelee..虽然我发布了另一个关于控制清晰度样式的问题,但我想我会绞尽脑汁..请看看 i.postimg.cc/Bv4M64JV/screenshot.png>..this 是一个动态生成的清晰度数据网格和表格。 ..但是,我正在努力控制标题(表单,列表)周围的空格/填充/边距和一般的输入标签..你能给我一些指示吗?
    • 对于不同的问题,最好问一个关于 SO 的新问题。似乎您可能想研究自定义主题。然而,自定义主题只暴露了这么多方面,因为有很多关于间距、填充、边距和垂直节奏的用户体验研究。这是自定义主题文档的链接:vmware.github.io/clarity/documentation/v0.13/themes。自定义主题部分大约在页面下方的 3/4 处。您还可以使用标准 css 覆盖您想要更改的任何内容,但请注意可能有其他元素受到影响。
    • 谢谢。我相信很多研究都涉及到这一点,从简单和务实的方法中可以看出这一点。虽然我不是 UX 领域的专家。这就是我的想法,覆盖样式可能会影响其他人,并且整个 UI 可能看起来与原始样式不同。这不是我打算做的……希望设计人员牢记大型企业 Web 应用程序(我正在迁移到 Angular..so 以搜索 UI)以及对大型表单的需求(甚至可能是一个附加- on) 并在即将发布的版本中提出“表单”领域的内容。再次感谢您..
    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2015-12-01
    • 2018-10-30
    • 2021-11-24
    相关资源
    最近更新 更多