我正在使用angular 4开发一个管理面板,并try 集成一个部分来定制样式,如更改 colored颜色 、背景等.

现在我正在try 使用json中的值生成一个动态css,我try 在主组件中使用以下代码,但它不起作用

@Component({
      templateUrl: 'card.html',
      styles: [`
        .card {
          height: 70px;
          width: 100px;
          color: {{css.cardColor}};
        }
      `],
})

我不确定应该如何在组件中加载css值,并在样式标记中使用它们.我没有找到任何其他解决办法.

另一种方法是使用Angular 动画概念,但css将是巨大的,不可能使用触发器和所有工具来实现整个Angular 动画.我相信有一个解决方案,因为这似乎是一个真正的需求,应该由许多其他开发人员完成.

任何帮助都是值得的.

编辑:不能使用ngStyle作为其应用于几乎所有元素的整体应用程序,而不仅仅是特定元素.

推荐答案

angular中可用的直接方法是使用ngstyle,如下所示

<div [ngStyle]="{'color': style.colorVal ? style.colorVal : '#000', 'font-size' : style.fontSize ? style.fontSize : '16px' }"></div>

在经历了不同的方法并try 将动态css添加到angular应用程序的所有页面之后,我最终得到了以下解决方案.

要求:根据API返回的值生成动态css,以更改设计和样式.

解决方案:

  1. 创建一个新组件并创建一个服务来从API加载动态css变量.
  2. 在模板文件中添加样式标记,并对特性使用变量值.
  3. 在所有页面或主模板上加载此模板.
  4. 应用程序上的构建样式将移动到head tag.

代码示例

import { CssService} from './Css.service';

@Component({
  selector: 'DynamicCss',
  templateUrl: './DynamicCss.component.html',
  styleUrls: ['./DynamicCss.component.scss']
})
export class ServiceProviderComponent implements OnInit {
    cssVariables: any;
    constructor(private cssService:CssService){
        /* call the service/api to get the css variable values in cssVariables */

    }
}

现在,使用jquery或javascript应用css,借助下面的函数附加css

appendCss(customData)
{
     let text = '.custom-form-1 {
            background-image: url("`+customData.background_image+`");
         }';
     $(document).ready(function(){
         $("style").append(text);
      });
}

并在从服务或其他变量加载自定义数据后调用此函数,就像我ngOnInit年前那样

ngOnInit(){
 this.appendCss(this.customizeFormData);
}

它使用jquery,但如果你不想在应用程序中使用jquery,也可以使用javascript/typescript

其他有用资源https://github.com/angular/angular/issues/9343#issuecomment-312035896

Typescript相关问答推荐

如何在不使用变量的情况下静态判断运算式的类型?

如果在TypeScript中一个原始的类方法是递归的,如何使用类decorator 模式?

返回同时具有固定键和变量键的对象的函数的返回类型

打印脚本丢失函数的泛型上下文

如何在LucideAngular 添加自定义图标以及如何使用它们

如何表示多层深度的泛型类型数组?

TypeScrip 5.3和5.4-对`Readonly<;[...number[],字符串]>;`的测试版处理:有什么变化?

MatTool提示在角垫工作台中不起作用

声明文件中的类型继承

如何从输入中删除值0

类型推断对React.ForwardRef()的引用参数无效

声明遵循映射类型的接口

Typescript .根据枚举输入参数返回不同的对象类型

如何使用angular15取消选中位于其他组件中的复选框

如何使用IsEqual创建断言类型相等的实用程序

在对象数组中设置值

断言同级为true或抛出错误的Typescript函数

如何确定剧作家中给定定位器的值?

有没有办法从不同长度的元组的联合中提取带有类型的最后一个元素?

是否可以从 TypeScript 的类型推断中排除this?