Angular 5资产路径变量

Posted

技术标签:

【中文标题】Angular 5资产路径变量【英文标题】:Angular 5 asset pathing variable 【发布时间】:2018-10-05 12:11:09 【问题描述】:

我有一张将用于各种组件的图片(即徽标)。

我的文件夹结构类似于:

src/
    app/
        component1/
            component1.component.ts
            ...
        component2/
            sub-component1/
                sub-component1.component.ts
                ...
            component2.component.ts
            ...
    assets/
        img/
            logo.jpg
        icons/
    styles.scss

有没有一种简单的方法可以将 assets/img 文件夹的路径存储在 SCSS/SASS 变量中,以便能够访问 logo.jpg 文件,而无需在各个组件中放置不同的相对路径?

我问的原因是我想换出基于主题的图像,这是我从this post here 实现的。当我的项目被编译时,插入到 background-image: url(...) 属性中的变量具有指定的路径,该路径不适用于所有组件。

我可以想象这也会极大地帮助其他场景。

【问题讨论】:

【参考方案1】:

看来 tslint 让我失望了。

在我的主题本身中,我将变量存储为:

$logo-path: url('assets/img/logo.jpg');

但是 tslint 将其突出显示为错误路径,因为它无法相对于主题本身的路径定位图像,因此因为在编译时它将该路径评估为不正确,当它被插入时它评估为 null我实际的组件级样式表。

为了解决这个问题,我在变量中设置了一个路径字符串,并在我的组件级样式表中评估了实际 URL。

$logo-path: 'assets/img/logo.jpg'

在我的组件级样式中:

.class-name
    background-image: url(#$logo-path);

可悲的是,有人回答了我的问题,指出我可以直接使用 assets 文件夹,而我实际上并没有尝试使用 assets 文件夹的直接路径进行构建,假设 tslint 在无效路径下是正确的。答案已被原发帖者删除,所以谢谢你让我走上了正确的道路(是的,这是故意的)。

【讨论】:

【参考方案2】:

来自this answer 的可能的其他解决方案:您可以存储资产文件夹的路径:

background: url(#$get-path-to-assets/site/background.jpg) repeat-x fixed 0 0;

然后您可以更改该变量的值。

【讨论】:

以上是关于Angular 5资产路径变量的主要内容,如果未能解决你的问题,请参考以下文章

ng serve 和 ng build 的 cli config 中的不同资产 [Angular 5]

Angular 5:如何访问应用程序或资产文件夹之外的图像文件?

Angular 6 从带有资产的 node_modules 导入 SCSS

Angular:防止资产文件夹发生更改时自动重新编译

Angular - 捆绑时加载资产

Angular + .nghaml 模板:引用预编译的图像资产