gpt4 book ai didi

javascript - 如何在angularjs中允许ng-model输入html

转载 作者:行者123 更新时间:2023-11-29 19:18:37 25 4
gpt4 key购买 nike

我有html代码:

<div class="inner-content-linkaudio">
<label for="linkaudio">Link audio</label>
<input type="url" name="linkaudio" ng-model="linkaudio" class="form-control">
</div>

但是当我进入输入并按下按钮提交表单时,出现错误:

Error: [$interpolate:interr] Can't interpolate: {{postcurrent.linkaudio}}
Error: [$sce:insecurl] Blocked loading resource from url not allowed by $sceDelegate policy. URL:

我如何才能允许输入 url 并提交表单而不会出错?谢谢。

最佳答案

这是 Strict Contextual Escaping (SCE) 的结果. Angular 将拒绝加载/呈现未被 SCE 策略明确信任为资源 URL 的字符串值。这是作为一项安全措施完成的,目的是保持对可以将哪些资源加载到您的应用程序的控制。

你可以写一个扩展兄弟NgModelController的指令信任所有输入作为资源 URL

angular.module('test', [])
.directive('trustedUrl', ['$sce', function($sce) {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
ngModel.$parsers.push(function(value) {
return $sce.trustAsResourceUrl(value);
});
}
}
}]);

然后可以用作

<input type="url" ng-model="url" trusted-url />
<audio ng-src="{{ url }}" controls></audio>

Here是一个工作的 Plunker。您可以通过将音频 URL 粘贴到输入中来进行测试。


另一种选择是使用 $sceDelegateProvider.resourceUrlWhitelist([...])仅将某些 URL 列入白名单,作为可以加载到您的应用中的 URL。

关于javascript - 如何在angularjs中允许ng-model输入html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34079838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com