javascript - 使用 $http 制作 Angular 过滤器?

标签 javascript angularjs scope angular-filters

我想做一个 $http get 请求并将结果返回给前端。在前端,我使用 {{ URL-STRING | iframely }}

'use strict'

angular.module( 'iframely', [] ).filter( 'iframely', [ '$http', function ( $http ) {
    return function ( url ) {

        var result = $http( {
            url: 'http://localhost:8061/iframely',
            method: 'GET',
            params: {
                url: url
            }
        })

        return( result.then( function ( result ) {
            console.log( result.data.html )
            return result.data.html
        }))
    }
}])

结果在前端我刚刚得到{}(看起来像一个空对象)。但我的控制台日志显示了所需的 HTML。

我非常确定一般设置是正确的,因为如果我只是在其中返回“it Works”,那就可以了。我认为问题出在 JS 范围、返回或我没有得到的 $http 上。

最佳答案

诺亚,

表达式被解析为 {},因为您在过滤器定义中返回的对象实际上是空的。您正在返回一个 promise ,而 AngularJS 只是在您的 HTML 中打印返回的对象 - 而不是您可能期望的解析值。

在这种情况下,您以不恰当的方式使用 AngularJS 过滤器。为了获得您想要的功能,您应该创建一个指令。您可以在 HTML 中按以下方式使用该指令:

<iframely url="{{ URL-STRING }}"></iframely>

并使用以下代码实现它:

angular
    .module('app', [] )
    .directive('iframely', ['$http', '$sce', function ($http, $sce) {
        return {
            replace: true,
            restrict: "E",
            scope: {
                url: '@'
            },
            template: '<div ng-bind-html="content"></div>',
            link: function(scope, element, attrs) {
                $http({
                    url: attrs.url,
                    method: 'GET'
                })
                .then(function (result) {
                    scope.content = $sce.trustAsHtml(result.data.html);
                });
            }
    };
}]);

值!

关于javascript - 使用 $http 制作 Angular 过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28538322/

相关文章:

javascript - 根据内部动态内容更改 iframe 高度

javascript - NodeJs sendFile 没有加载 webpack 包

javascript - Angular 如何设置输入类型文件的样式

jquery - Angular `$.ajax` 可以工作,但 '$resource` - 抛出错误如何解决这个问题?

swift - Swift 3.1 中 `do` block 内的标识符识别

c++ - "not in this scope"cpp函数调用错误

javascript - 从其他页面调用时在 PHP 中调试 MySQL 查询

javascript - 在 Firefox 中,在 keydown 事件处理程序中更改焦点会自动单击已聚焦的内容。我该如何防止这种情况?

javascript - AngularJS:面板和内部链接上的 ui-sref

java - 什么使这个上下文静态?怎么办?