当你点击一个特定的项目时,会有一个页面,面板会出现在右边。
当面板打开时调用Angular JS代码进行操作。
Angular JS代码应该在HTML文档中查找id值为'view-link'的元素。
但是,它只在面板第一次打开时查找项目,而在面板关闭然后重新打开时无法找到元素。
在开发者模式下,元素查找通常使用与代码相同的语法执行。
我必须刷新(F5)才能再次检索它。
有什么问题吗?
将其视为变量或控制器初始化问题,我们已将link_element_2变量配置为在link_element没有href值时进行初始化。
您试图查找的html代码如下所示,并且在面板打开时始终包含该代码。
<a id="view-link" href="https://www.google.com">https://www.google.com</a>
我的代码:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
console.log('widget load!!!');
var link_element = null;
var link_element_2 = null;
console.log(link_element);
var youtube_link = null;
console.log(youtube_link);
link_element = angular.element(document.getElementById('view-link'));
console.log('link_element IS');
console.log(link_element);
if(link_element.attr('href') == undefined)
{
console.log('In if case');
link_element_2 = angular.element(document.getElementById('view-link'));
console.log('link_element_2 IS');
console.log(link_element_2);
}
$scope.controllerActive = true;
$scope.$on("$destroy", function() {
$scope.controllerActive = false;
console.log("Controller destroyed");
});
});
其结果如下。
屏幕是开发者模式下的控制台日志。
enter image description here
1条答案
按热度按时间cqoc49vn1#
看来你遇到了时间问题。JavaScript代码在新的DOM元素(在面板打开时引入)完全加载之前执行。这会导致脚本无法通过元素ID找到元素,因为在执行时,它还不存在于DOM中。要解决这个问题,你应该使用Angular的$timeout服务。
如果成功了告诉我。