相关疑难解决方法(0)

将HTML插入视图

是否可以在AngularJS控制器中创建HTML片段并在视图中显示此HTML?

这需要将不一致的JSON blob转换为嵌套的id : value对列表.因此,HTML是在控制器中创建的,我现在希望显示它.

我创建了一个模型属性,但是如果不打印HTML,则无法在视图中呈现它.


更新

似乎问题来自角度渲染创建的HTML作为引号内的字符串.将试图找到解决这个问题的方法.

示例控制器:

var SomeController = function () {

    this.customHtml = '<ul><li>render me please</li></ul>';
}
Run Code Online (Sandbox Code Playgroud)

示例视图:

<div ng:bind="customHtml"></div>
Run Code Online (Sandbox Code Playgroud)

给:

<div>
    "<ul><li>render me please</li></ul>"
</div>
Run Code Online (Sandbox Code Playgroud)

javascript escaping html-sanitizing angularjs

788
推荐指数
9
解决办法
64万
查看次数

ng-repeat定义次数而不是重复数组?

有没有办法重复定义的次数而不是总是迭代一个数组?

例如,下面我希望列表项显示5次,假设$scope.number等于5,另外增加数量,以便每个列表项增量如1,2,3,4,5

期望的结果:

<ul>
   <li><span>1</span></li>
   <li><span>2</span></li>
   <li><span>3</span></li>
   <li><span>4</span></li>
   <li><span>5</span></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

angularjs ng-repeat angularjs-ng-repeat

414
推荐指数
14
解决办法
37万
查看次数

AngularJS如何动态添加HTML并绑定到控制器

我刚开始使用angularJS并且正在努力找出适合我正在尝试的架构.我有一个单页应用程序,但URL始终保持不变 ; 我不希望用户能够导航到root之外的任何路由.在我的应用程序中,有一个主要div需要托管不同的视图.访问新视图时,我希望它接管主div中的显示.以这种方式加载的视图可以丢弃或隐藏在DOM中 - 我很想知道每个视图的工作原理.

我想出了一个粗略的工作示例,说明我正在尝试做什么. 请参阅此Plunk中的工作示例. 基本上我想动态地将HTML加载到DOM中,并让标准的angularJS控制器能够挂钩到新的HTML中.有没有更好/更简单的方法来做到这一点,而不是使用我在这里的自定义指令并使用$ compile()来连接到角度?也许有点像路由器,但是不需要URL有变化才能运行?

这是我到目前为止使用的特殊指令(取自另一个SO帖子):

// Stolen from: http://stackoverflow.com/questions/18157305/angularjs-compiling-dynamic-html-strings-from-database
myApp.directive('dynamic', function ($compile) {
  return {
    replace: true,
    link: function (scope, ele, attrs) {
      scope.$watch(attrs.dynamic, function(html) {
        if (!html) {
            return;
        }
        ele.html((typeof(html) === 'string') ? html : html.data);
        $compile(ele.contents())(scope);
      });
    }
  };
});
Run Code Online (Sandbox Code Playgroud)

谢谢,

安迪

javascript angularjs

58
推荐指数
3
解决办法
20万
查看次数

在$ sce.trustAsHtml中渲染指令

我在这里包含了一个Plunker:http://plnkr.co/edit/4vqV8toHo0vNjtfICtzI?p = preview

我正在尝试向DOM添加一个按钮,当单击时应该执行绑定到它的函数.在这种情况下,它应警告"测试".这是代码.

调节器

app.controller('MainCtrl', function($scope, $sce) {
        $scope.trustedHtml = $sce.trustAsHtml('<button ng-click="testAlert()">Submit</button>');  

        $scope.testAlert = function () {
            alert('testing')
        };
});
Run Code Online (Sandbox Code Playgroud)

HTML

<body ng-controller="MainCtrl">
    <div ng-bind-html="trustedHtml"></div>
</body>
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-directive angularjs-scope

23
推荐指数
2
解决办法
2万
查看次数

使用angularjs中的外部窗口小部件加载动态脚本块

我有脚本块来加载局部视图上的小部件,但如果我直接放在部分html页面上,我会收到以下错误:

"无法在'Document'上执行'write':除非明确打开,否则无法从异步加载的外部脚本写入文档."

示例脚本块是:

> <script type="text/javascript"  defer="defer"
> src="http://svenskfotboll.se/widget.aspx?scr=table&amp;ftid=57108&amp;b1=%232f3841&amp;f1=%23ffffff&amp;b2=%23acbfda&amp;f2=%23000000&amp;b3=%23ffffff&amp;f3=%23000000&amp;b4=%23ececec&amp;bo=%23dfdfdf&amp;s=1"></script>
Run Code Online (Sandbox Code Playgroud)

我将有多个小部件,所以我想通过ng-repeat加载一些东西.请指教.

注意 我尝试显示静态方式为此我添加一个带有html/body标签的html页面并将其放在上面的脚本块然后通过iframe加载该页面然后它工作.但是在加载到iframe之前更新内容非常困难

html javascript angularjs

13
推荐指数
1
解决办法
1295
查看次数

编译动态内容 - AngularJS

我正在重写这个问题,因为我认为原文不太清楚.

基本上,我有一个'wrapper'指令,我试图动态地将属性添加到一个包装(transcluded)元素.我可以让它工作,但Angular似乎并没有意识到添加后的新属性.

如果我使用,$compile那么Angular会识别它们 - 但是以双重编译被转换的内容为代价,在这种情况下它options会使select标记中的数量加倍.

这里是一个plunker什么我试图能证明(有评论),下同代码如下对于那些谁可以查看代码,并暗示答案只是看:(注意-我的最终目的是检查自定义指令valid-form-grouprequired属性,如果发现将其应用于包含的select标记)

HTML

<body ng-controller="MainCtrl">

  <form name="validationForm" novalidate>

    <valid-form-group class="form-group" ng-class="{'has-error': validationForm.validInfo.$error.required}" required>

      <select ng-model="data.option" ng-options="option.id as option.message for option in selectOptions" name="validInfo" id="validInfo">
        <option value="">-- Select a Question --</option>
      </select>

    </valid-form-group>

  </form>

</body>
Run Code Online (Sandbox Code Playgroud)

JS

var app = angular.module('plunker', [])
  .controller('MainCtrl', function($scope) {
    $scope.selectOptions = [
      {id: 1, message: 'First option'}, 
      {id: 2, message: 'Second option'}, 
      {id: 3, message: 'Third option'}
    ];
  }) …
Run Code Online (Sandbox Code Playgroud)

html javascript angularjs

7
推荐指数
1
解决办法
4229
查看次数

从后端渲染($ compile)html到视图中而不阻塞dom

CONTEXT

我需要在我的AngularJS(v1.4)应用程序中加载一些从后端获取的HTML并将其(html)插入到我的部分(已加载)中.部分已经加载了一些HTML(并且功能完全正常).现在我可以加载HTML并使用此处发布的指令编译它(从数据库编译动态HTML字符串).见下面的代码.

问题

但是......当部分HTML已经加载(部分加载和功能)然后我从后端获得另一个HTML内容,并且该指令正在编译新的内容时,整个文档(DOM)被"冻结".我无法输入输入或点击按钮,包括我之前加载的HTML中的按钮.

我如何加载HTML内容,$compile它以"后台"或任何其他方式加载,以便我继续使用其余的(已经正常运行的)HTML?

对我来说,必要的是,到达的新html内容会被编译,因为它包含角度验证等等,需要编译并进入"角度世界"(在角度摘要周期内等等).

这是我用来编译html的指令

(function () {

    var dynamic = function($compile) {
        return {
            restrict: 'A',
            replace: true,
            link: function (scope, ele, attrs) {
                scope.$watch(attrs.dynamic, function(html) {
                    if (html) {
                        ele.html(html);
                        $compile(ele.contents())(scope);
                    }

                });
            }
        };
    };

    dynamic.$inject = ['$compile'];

    angular.module('app')
        .directive('dynamic', dynamic);
}());
Run Code Online (Sandbox Code Playgroud)

在控制器中,我有类似的东西

// this will be filled with asynchronous calls were I get the HTMLs from a service
// in order …
Run Code Online (Sandbox Code Playgroud)

html javascript dom compilation angularjs

5
推荐指数
1
解决办法
1193
查看次数

点击 ng 时生成动态 html

我想插入包含 ng-bind 和 ng-click 指令的动态 html 元素。我想在里面插入新的 html 元素

html 看起来像这样

     <body data-ng-controller="controller">
         <div id="toolbox">
             <label>Page Width</label>
             <input type="text" data-ng-model="pageWidth" />
             <input type="button" value="H1" data-ng-click="createH1()" />
         </div>
         <div id="editor">
             <div data-ng-style="{width:pageWidth + 'px'}" data-ng-page>

             </div>

         </div>
    </body>
Run Code Online (Sandbox Code Playgroud)

控制器 >

    app.controller('controller', ['$scope', function ($scope) {
        $scope.createH1 = function () {
            document.getElementById("page").innerHTML = document.getElementById("page").innerHTML + ("<div class='h1' data-ng-h1 draggable></div>");
        };
    }]);
Run Code Online (Sandbox Code Playgroud)

上面的控制器正在插入 html 元素,但新 html 元素的指令不起作用。

然而我开始知道,除非我们 $compile template/html ,否则它们将无法工作。
如果我使用 app.directive( ngPage, ..) 添加动态 html,它会在应用程序启动时插入。但我只想插入按钮 ng-click。

我是 Angular JS 的新手,有点困惑,请帮我解决这个问题。提前致谢。

click angularjs

4
推荐指数
1
解决办法
2万
查看次数