当将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>
然后:
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](http://jsfiddle.net/Blackhole/chehd/2/)
请注意,尽管Chrome可在Firefox中“运行”,但我无法在Fiddle中重现该问题。
我尝试使用来创建我的整个SVG都无济于事document.createElementNS()
。
有人对正在发生的事情有想法吗?
问题是<base>
我的HTML页面中有一个标签。因此,用于标识过滤器的IRI不再相对于当前页面,而是相对于<base>
标记中指示的URL
。
例如,此URL也是我主页的URL http://example.com/my-folder/
。
对于除主页之外的网页,http://example.com/my-folder/site/other- page/
例如,#blurred
在计算绝对URL http://example.com/my- folder/#blurred
。但是对于一个简单的GET请求,没有JavaScript,因此也没有AngularJS,这只是我的基本页面,没有加载模板。因此,
该页* 面上 不存在 该#blurred
过滤器。 *
在这种情况下, Firefox 不会呈现<rect>
(这是正常行为,请参阅W3Crecommandation)。Chrome 根本不应用过滤器。
对于主页,#blurred
还将计算为绝对URLhttp://example.com/my-folder/#blurred
。但是这次,这也是当前的URL。无需发送GET请求,因此 存在*#blurred
过滤器。 *
我应该已经看到了对的额外请求http://example.com/my-folder/
,但是为了防御起见,它在对JavaScript文件的大量其他请求中丢失了。
如果<base>
标记是强制性的,则解决方案是使用绝对IRI标识过滤器。在AngularJS的帮助下,这非常简单。在控制器或链接到SVG的指令中,注入$location
服务并使用absUrl()
getter:
$scope.absUrl = $location.absUrl();
现在,在SVG中,只需使用以下属性:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<filter id="blurred">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<rect style="filter:url({{absUrl}}#blurred)" fill="red" height="200" width="300" />
</svg>
我用角2,我创建一个甜甜圈图 组件的html 我想要的是将这些值作为主组件的输入进行传递。因此,假设在html上,我将该组件称为: 主HTML 组成部分js代码 因此,我的问题是如何将这些输入传递到组件的html中。
问题内容: 在ng-repeat中的angular.js条件标记之后,我尝试编写一个自定义过滤器进行分组。我遇到了有关对象标识和正在监视更改的模型的问题,但我想我终于确定了问题,因为控制台中不再弹出任何错误。 原来我错了,因为现在当我尝试将其与其他过滤器(用于分页)结合时,就像这样 我得到了可怕的“达到10个$ digest()迭代。正在中止!” 再次出现错误消息。 这是我的组过滤器: 注意输入上
我有完全合法的数据来源: 我将其显示在这样的表中: 现在假设我想过滤我的数组。如果我有固定的行数,我可以在< code>tr元素上使用< code>*ngIf来选择显示/不显示一个项目,但是Angular不允许在一个元素上有两个结构指令。 我知道我可以使用< code>Array.filter简单地过滤源数组,但是这样会产生一个副本,如果我的数组大得多,这可能会成为一个问题。 我想将该行嵌套在某个
SVG滤镜用来增加对SVG图形的特殊效果。 SVG 滤镜 在本教程中,我们将仅展示一个可能采用的特殊效果。基础知识展示后,你已经学会使用特殊效果,你应该能够适用于其他地方。这里的关键是给你一个怎样做SVG的想法,而不是重复整个规范。 SVG可用的滤镜是: feBlend - 与图像相结合的滤镜 feColorMatrix - 用于彩色滤光片转换 feComponentTransfer feComp
我用角5.2.0和之。我只是t 到目前为止,我已经尝试最小化svg特定标签的数量,这样我就可以避免这个问题,但是,似乎我拥有的标签都需要正确渲染图像(将下面的版本保留为未剪切)。 我也试过把svg:前缀在前面 片段:https://stackblitz.com/edit/angular-wmhj27?file=app/app.component.html 欢迎任何建议/建议。 我已经排除了所有其他
问题内容: 我想在 angularjs 1.2中 使用unsafe-html 。没有html的过滤器可以工作,而html则不能。我做的事: 我在我的html头中添加了angular-sanitize: 我的角度模块: 我的HTML: 编辑:更新为 问题答案: 已在Angular 1.2中删除。由于您正确地清理了输入内容,因此应该使用。 示例:http://plnkr.co/edit/0bHeXra