【发布时间】:2013-11-13 14:25:13
【问题描述】:
在将 SVG 与 AngularJS 一起使用时,我遇到了一个奇怪的行为。我正在使用$routeProvider 服务来配置我的路线。当我把这个简单的 SVG 放在我的模板中时,一切都很好:
<div id="my-template">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect fill="red" height="200" width="300" />
</svg>
// ...
</div>
但是当我添加一个过滤器时,例如以下代码:
<div id="my-template">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<filter id="blurred">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<rect style="filter:url(#blurred)" fill="red" height="200" width="300" />
</svg>
</div>
然后:
- 它适用于我的主页。
- 在 Firefox 中,SVG 在 其他页面 上不再可见,但它仍会在原处留出空间。使用 Chrome,SVG 是可见的,但根本不会模糊。
- 当我手动(使用 Firebug)删除
filter样式时,SVG 再次可见。
这里是路由配置:
$routeProvider
.when('/site/other-page/', {
templateUrl : 'view/Site/OtherPage.html',
controller : 'Site.OtherPage'
})
.when('/', {
templateUrl : 'view/Site/Home.html',
controller : 'Site.Home'
})
.otherwise({
redirectTo : '/'
})
;
请注意,我无法在 Fiddle 中重现 Chrome 的问题,尽管它适用于 Firefox。
我尝试使用 document.createElementNS() 创建整个 SVG,但无济于事。
有人知道发生了什么吗?
【问题讨论】:
-
是浏览器特有的问题吗?它适用于 Chrome 吗?
-
我认为发生的事情是 angularjs 正在将过滤器运算符应用于 svg 元素,并且因为 url(#blurred) 在 angularjs 上下文中计算为 false,它隐藏了
元素 -
@musically_ut 我已经编辑了我的问题:在 Chrome 中,
rect可见但不模糊。 -
@fabrizioM 听起来有点奇怪……那为什么不在首页呢?
-
你为什么不使用正常的过滤器语法
?