gpt4 book ai didi

javascript - Angular JS : data binding with dynamically added html elements

转载 作者:太空宇宙 更新时间:2023-11-04 15:40:24 25 4
gpt4 key购买 nike

我在 Angular JS 中面临双向数据绑定(bind)的问题。这是示例代码。

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body ng-app="">

<div>

<p>Input something in the input box:</p>
<p>Name: <input type="text" ng-model="name"></p>

<div id="jack">
</div>
<script>
$("document").ready(function(){
$("#jack").append("<p ng-bind='name'></p>");
});
</script>
</body>
</html>

在这里,我使用 jQuery 动态地将带有 ng-bind 的段落添加到名为 jack 的 div

由于某种原因,当我在输入框中输入某些内容时,它没有反射(reflect)在具有 ng-bind 属性的段落中。

我是 Angular js 的新手,请您为我提供一个简单的解决方案来解决这个问题。

最佳答案

您不能使用 jQuery 以这种方式在 Angular 之外修改 DOM。 Angular 不知道该绑定(bind),因为它不是由 Angular 编译的。

要解决此特定示例,只需删除 jQuery 脚本并将 HTML 更改为:

<p>Input something in the input box:</p>
<p>Name: <input type="text" ng-model="name"></p>
<p ng-bind="name"></p>

上面的例子可以工作,但我想这不是一个真实的例子。如果您发布更具体的场景,我可以更新我的答案来帮助您解决该问题。

编辑

根据您的评论,我将创建一个简单的指令,您可以将模板传递给该指令,它将编译模板并将编译后的模板注入(inject) DOM 中。

指令:

function myTemplateCompile($compile) {

return {
restrict: 'E',
link: link
}

function link(scope, elem, attrs) {

attrs.$observe('template', (template) => {
elem.html(template);
$compile(elem.contents())(scope);
});

}

}

HTML

<my-template-compile template="any HTML you might need including bindings"></my-template-compile>

然后,您可以动态更改指令的模板属性,它将根据新值重新编译和更新 DOM。

上面的示例应该为您指明了正确的方向。我只是要警告你,这可能非常危险。如果您注入(inject)的内容来自某些用户输入,则可能会产生非常严重的安全隐患。请确保您的应用程序不会受到攻击。

关于javascript - Angular JS : data binding with dynamically added html elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43932186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com