【问题标题】:AngularJS dynamic element ID and DOM accessAngularJS 动态元素 ID 和 DOM 访问
【发布时间】:2019-04-04 17:14:31
【问题描述】:

在我的代码中,我创建了一个具有动态生成 ID 的元素。之后,我试图从我的控制器中填充相同的元素,但对于控制器来说,该元素似乎不存在。

以下是代码的相关部分:

(html)

<div class="pd_graph" ng-controller="pd.controller" id='cont-{{ my_context }}'>
</div>

(AngulaJS 控制器)

$scope.my_context = "test";
$('#cont-'+ $scope.my_context).html("<h2>Hello world</h2>");

我的预期结果是这样的:

<div class="pd_graph" ng-controller="pd.controller" id='cont-test'> 
<h2>Hello world</h2>
</div>

有没有办法做到这一点?到目前为止,当我尝试访问 $('#cont-'+ $scope.my_context) 它根本不存在。

提前谢谢你!

【问题讨论】:

  • 尝试使用$timeout 包装您的jQuery 代码。在 AngularJS 中使用 jQuery 进行 DOM 操作也是一个坏主意(没有充分的理由)。您应该使用具有 jQLite 的指令
  • 设置变量后 DOM 不会立即呈现,请使用超时。
  • 我已经尝试过 $timeout 选项。由于某种原因,它只是忽略了延迟并立即执行该功能。将调查指令的事情......
  • @AlekseySolovey 我做了,但没有帮助:(
  • 我认为你应该用 Angular 创建这个元素,而不是 jQuery

标签: jquery angularjs dom


【解决方案1】:

jQuery 选择器需要为id 属性使用#。您的 id 已经以它开头 - #cont-test。建议你改成cont-test.
然后将任何 jQuery 代码包装在 $timeout 函数中,否则 id 将不会被渲染(jQuery 不是 AngularJS 摘要循环的一部分)。

这是一个演示:

var app = angular.module('myApp', []);
app.controller('ctrl', function($scope, $timeout) {
  $scope.my_context = "test";
  $timeout(function() {
    $('#cont-' + $scope.my_context).html("<h2>Hello world</h2>");
  });
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

<div ng-app="myApp">

  <div class="pd_graph" ng-controller="ctrl">
    <div id="cont-{{my_context}}">replace me</div>
  </div>

</div>

【讨论】:

  • 您对 ID 上的“#”是正确的。我已经更正了我的问题的代码。
猜你喜欢
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多