css 中的 url 被 angular 重写

Posted

技术标签:

【中文标题】css 中的 url 被 angular 重写【英文标题】:url in css get rewritten with angular 【发布时间】:2015-05-20 12:50:54 【问题描述】:

在 Angular 中,使用 svgs 设置基本集和 html5mode 存在问题。它会导致像filter: url(#url) 这样的所有东西都被重写为filter: url(/base/#url)

https://github.com/angular/angular.js/issues/8934

我已尝试禁用 html5 模式并删除基础,但每当 Angular 引导时,它仍会重写 url。

如果 svg 存在,则在加载 angular 时,它将显示正确的剪辑/过滤器,但是一旦 angular 初始化它就消失了。有谁知道解决方法?我已经尝试在定位它之前使用完整的文件路径以及使用禁用base。

我的意思是有基数 <base href='/'> 可以正常工作。

对这个问题的进一步检查表明,当初始化 angular 时,它会将过滤器转换为 svg

角度之前

<svg>
  <defs>
    <filter>
    </filter>
  </defs>
  <g> 
    <path>
  </g>
</svg>

引导后

<svg>
  <defs>
    <svg class='filter'> 
      <path>
    </svg>
  </defs>
  <g> 
   <path>
  </g>
</svg>

【问题讨论】:

你所说的“有基数”是什么意思? 【参考方案1】:

我认为您可能在索引文件的头部设置了错误的基本属性。

请务必检查所有相关链接、图像、脚本等。Angular 要求您在主 html 的头部指定 url base file() 除非 html5Mode.requireBase 设置为 传递给的 html5Mode 定义对象中的 false $locationProvider.html5Mode()。这样,相对网址将始终是 解析到这个基本 url,即使文档的初始 url 是 不同。

Documentation

【讨论】:

我在帖子中添加了更多详细信息。它与base无关,因为无论有没有它的行为都相同,chrome检查器中的url路径也是正确的。【参考方案2】:

这最终是因为我们有一个名为 filter 的指令......

我们犯了一个严重的错误!

【讨论】:

以上是关于css 中的 url 被 angular 重写的主要内容,如果未能解决你的问题,请参考以下文章

Angular 4+ 背景 css 参考 URL 图像路径

在AngularJS中使用Node for Angular HTML5 Mode重写IIS URL

Tomcat 8 URL 重写

.htaccess使用URL中的#item重写站点以进行直接文件访问

url在tomcat 8服务器上重写Angular 4

Webpack:如何在 .css 中重写 URL