javascript - Angular 1.4 解析 ng-bind-html 的内容

标签 javascript jquery html angularjs ajax

我在做什么?

简单地说:我有一个名为 $scope.myData 的对象数组和一个名为 $scope.layout 的字符串。我想做的是使用 ng-repeat="x in myData"ng-bind-html="layout" 建立一个跨度。布局在多个位置有 {{ x.key }}。我希望它加载布局,然后开始为数组中的每个对象显示它,并填充变量。

更具体地说:我通过 AJAX(使用 jQuery)加载数据和布局。我不确定这是否重要,因为其他一切都工作正常。

到目前为止我有什么代码?

我在 $scope.layout 变量中加入了 angular-sanitize.js 来取消对 HTML 的清理。我还在 app=angular.module() 声明中添加了 ngSanitize

在 AJAX 内容下,您实际上只需要读取 if(status=='success'){} 中的内容,因为该部分有效。

<script type="text/javascript">
    $(document).ready(function(){
        $('a.doit').click(function(e){
        e.preventDefault();

        $.ajax({
            method:'POST',
            data:{'ajax':true},
            url:'<?=URL('--url to load from--')?>'
        }).always(function(data,status){
            if(status=='success'){
                var getelementby='[ng-app="myApp"]';
                window.data=data;
                angular.element(document.querySelector(getelementby)).scope().$apply(function($scope){
                    $scope.layout=window.data.layout;
                    $scope.myData=window.data.data;
                });
            }else{
                console.log('Error :(');
            }
        });
    });
});

var app=angular.module('myApp',['ngSanitize']);

app.controller('myCtrl',function($scope,$http){$scope.myData={};});
</script>

<a href="#" class="doit btn btn-default">Load</a>

<div ng-app="myApp" ng-controller="myCtrl">
   <span ng-repeat="x in myData"><span ng-bind-html="layout"></span></span>
</div>

(我知道到目前为止我的错误检查还很粗糙)

它有什么作用?它以正确的次数显示布局,但它不填充 {{ x.key }} 表达式。

我可能做错了什么?我已经对我的 HTML 进行了清理。这不是 Angular 的工作原理吗?还有其他方法吗?

最佳答案

您不应该通过 ng-bind-html 加载 Angular 模板。

而不是这个:

// controller 
$scope.templ = '{{ x }}';

// template 
<div ng-bind-html="templ"></div>

将模板移至其自己的指令:

// someDirective.js
angular.module('my.module').directive('myTemplate', function () {
  return {
    template: '{{ x }}'
  };
});

并在原始模板中使用该指令:

<some-directive />

关于javascript - Angular 1.4 解析 ng-bind-html 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37038059/

相关文章:

javascript - 在 Javascript 中停止嵌套超时

javascript - 输入字符 Controller

javascript - 根据下拉选项更改标签

javascript - 从主题标签网址中删除最后的 '/' 字符

javascript - 如何隐藏多个元素

javascript - jquery根据类集选择具有多个类的元素

php - 表单写入mysql数据库

javascript - 如何使用动态 TOC 光标创建静态 html 页面

javascript - 如何提交自定义输入字段数据

javascript - jQuery 拖放上传...在哪里可以找到?