Angularjs - 如何绑定由javascript代码添加的html元素
Angularjs - 如何绑定由javascript代码添加的html元素
我想将由JavaScript代码添加的HTML元素与Angular事件和模型绑定。我的代码在这里。 https://jsfiddle.net/hq7qk48n/13/
代码如下:
click1click1 : {{ clickedTime1.toLocaleString() }}
click2 : {{ clickedTime2.toLocaleString() }} {{ text1 }} {{ text2 }} function MyController($scope) { $scope.clickedTime1 = null; $scope.clickedTime2 = null; $scope.onClick = function () { var html = ' click2'; $("#append").empty(); $("#append").append(html); $scope.clickedTime1 = new Date(); } $scope.onClick2 = function () { $scope.clickedTime2 = new Date(); }; }
onClick2()不起作用,模型"text2"也没有更新。如何绑定onClick2函数和text2模型?需要编译HTML元素吗?如何实现?
问题的原因是需要在AngularJS中将通过JavaScript代码添加的HTML元素进行绑定。解决方法是通过添加$event对象来传递调用元素的信息,并使用$compile服务来编译新元素。
首先,在调用方法的元素上添加$event:
click1
然后,在方法中添加$event:
$scope.onClick=function($event){
接下来,需要将元素转换为AngularJS元素:
var el=angular.element(' click2');
然后,使用jQuery将元素添加到目标元素中:
$($event.currentTarget).empty(); $($event.currentTarget).append(el);
然后,将新元素进行编译:
$compile(el)($scope);
最后,确保在调用方法时也添加$event对象:
$scope.onClick2 = function () { $scope.clickedTime2 = new Date(); };
虽然在控制器中使用DOM元素可能不是最佳实践,但有时候这样做是有效的。这就是解决该问题的方法。