【问题标题】:Dynamic html with angular bindings not working带有角度绑定的动态 html 不起作用
【发布时间】:2017-09-08 23:00:27
【问题描述】:

我有一个简单的 javascript 代码,可以将 HTML 内容动态添加到 div 标签。

function addData(id,title,title_data){

  var htmlcode='';

  htmlcode+=`<h1> Title: `+title+` </h1> <div ng-app="">
              <input ng-model="model`+title+id`" ng-init="model`+title+id+'='+\'`+title_data+`\'`"    >`+


`<p ng-bind="model`+title+id`"> </p>`;



   return htmlcode;
}

那我就这么简单地使用它:

$('#someDiv').html(addData(1,'Some Title','Some title data'));

html 运行良好并显示所需的动态内容。但是角度绑定不起作用。从 Web 浏览器复制粘贴的渲染 html 版本可以很好地工作,包括绑定,但动态的则不行。似乎是什么问题?

【问题讨论】:

  • 我认为这可能是因为在页面加载期间已经为现有实体创建了绑定。而且您稍后会尝试在代码中添加新的绑定。
  • 首先,$('#someDiv') 是 jQuery 代码,而不是 Angular;尝试以这种方式使用角度是非常不规则的,不推荐。这似乎表明您的整体应用程序设计可能并未完全采用角度。如果您能够重构您的应用程序以删除 jQuery 并且 仍然 发现您需要这样的 HTML 字符串(而不是角度模板或类似的),那么,只有这样,你应该看看如何编译动态表达式。
  • 除了我的最后一条评论之外,您在此处使用的实际 Angular 代码是 非常古老的语法,对于 Angular 版本 1.2,它已经超过 3 年了。 ng-app==="" 时,较新版本的 Angular 将无法工作。
  • 任何修改 DOM 的代码都应该作为指令来实现。您将 JQuery DOM 操作与 Angular 混合在一起。在您告诉 angularjs 编译并重新运行摘要循环之前,角度数据绑定将无法在这里工作。
  • 这里的主要问题是 angular 在页面加载时被初始化;在页面完成加载后向 DOM 添加 ng-app 并不会告诉 Angular 它应该去寻找那个元素。如果您坚持认为这是开发此应用程序的唯一方法,您将负责手动引导应用程序 (docs.angularjs.org/guide/bootstrap),但这通常意味着您需要了解更多关于该框架是如何工作的,并且在您花时间了解它之后,您会意识到这确实是一个多么糟糕的想法。

标签: javascript angularjs ng-bind


【解决方案1】:

您没有在声明的动态 html 代码中使用 ng-app 名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 2014-06-26
    • 2014-12-25
    • 2015-01-07
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多