【问题标题】:Load a graph from a generated url从生成的 url 加载图表
【发布时间】:2017-02-16 19:58:47
【问题描述】:

我想建立一个在线 html/css/javascript 游乐场。当代码绘制图表时,我希望能够生成一个 url,用户可以通过它在浏览器中加载此图表。

目前,在操场上,我有一个链接到函数generateUrl 的按钮:

$scope.generateUrl = function () {
    urls.create({
        // allCode is a string like "<html><body><canvas ...>...</canvas><script>...</script></html>"
        content: $scope.allCode
    }).success(function (url) {
        alert(url._id)
    });
};

然后,我想在浏览器中加载像 localhost:3000/urls/58a56d0962bd39979d142e27 这样的 url 的 id:

app.config(['$stateProvider', function ($stateProvider) {
    $stateProvider
        .state('urls', {
            url: '/urls/{id}',
            template: "{{url.content}}",
            controller: 'UrlCtrl',
            resolve: {
                url: ['$stateParams', 'urls', function ($stateParams, urls) {
                    return urls.get($stateParams.id);
                }]
            }
        })

但是,上面的代码只显示了字符串而不是图形:

此外,它嵌入在我的全局index.ejs&lt;ui-view&gt;&lt;/ui-view&gt; 中。这种行为是意料之中的,但这不是我希望用户在加载 www.mysite.com/urls/58a56d0962bd39979d142e27 时看到的。

有谁知道如何设置从生成的 url 加载图表?

【问题讨论】:

    标签: javascript html canvas angular-ui-router angular-ui-router-extras


    【解决方案1】:

    相信你需要使用 Angular 的Strict Contextual Escaping 服务,也就是大家熟知的$sce

    严格上下文转义 (SCE) 是一种模式,其中 AngularJS 要求在某些上下文中进行绑定以生成一个标记为可安全用于该上下文的值。这种上下文的一个示例是绑定由用户通过 ng-bind-html 控制的任意 html。我们将这些上下文称为特权上下文或 SCE 上下文。

    因此,您可以使用 ngBindHtml 指令,而不是简单的插值。

    <div ng-bind-html="url.content"></div>
    

    或者,您也可以在 url 解析函数中注入 $sce 并调用 trustAsHtml 方法:

    resolve: {
        url: ['$sce', '$stateParams', 'urls', function ($sce, $stateParams, urls) {
            return $sce.trustAsHtml(urls.get($stateParams.id));
        }]
    }
    

    如果您的 HTML 代码包含 htmlbody 标签,我不确定会发生什么。也许你需要删除那些。

    【讨论】:

    • 其实我意识到我们需要同时使用ng-bind-html$sce.trustAsHtml...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多