当通过另一个javascript函数加载HTML时,单击“不工作”
我有一个javascript函数,它从JSON数据构建一个树,并创建一个锚定标记元素列表,如:当通过另一个javascript函数加载HTML时,单击“不工作”,javascript,html,angularjs,Javascript,Html,Angularjs,我有一个javascript函数,它从JSON数据构建一个树,并创建一个锚定标记元素列表,如: 一些数据 此列表在页面加载后填充。此ng单击未在控制器上注册。这是我的控制器: catalog.controller('categoryTree',['$scope',函数($scope){ $scope.shareParent=函数(父级){ console.log(父级) } }]); 数据永远不会显示在控制器上。我是一个新手,所以我可能在这里做了一些非常错误的事情。我甚至尝试调用$scope
一些数据
此列表在页面加载后填充。此ng单击未在控制器上注册。这是我的控制器:
catalog.controller('categoryTree',['$scope',函数($scope){
$scope.shareParent=函数(父级){
console.log(父级)
}
}]);
数据永远不会显示在控制器上。我是一个新手,所以我可能在这里做了一些非常错误的事情。我甚至尝试调用$scope.$apply(),但这也没有任何好处
锚元素确实有一个与之关联的控制器,并且还声明了一个ng应用程序。只是ng的点击不起作用
编辑: 在添加DOM元素后,在我的控制器中使用以下注入器代码解决了此问题:
$injector = angular.element(document.querySelector('#categoryTree')).injector();
element = angular.element(document.querySelector('#category-tree'));
$injector.invoke(function ($compile) {
var scope = element.scope();
$compile(element)(scope);
});
也许有更好的方法可以做到这一点。您的代码看起来很不错。是否已将HTML绑定到控制器的categoryTree?在Angular中创建新的HTML元素时,必须将其连接到作用域。这称为编译 例如:
function myController($scope,$compile,$element){
//Creating New Element
var newElement=$('<div ng-click=hello()>Hello World</div>')
//Compile The Element, and assign it to current scope
$compile(newElement)($scope)
//Append the element, to wherever do you want. For example to current controller element
newElement.appendTo($element)
$scope.hello=function(){
alert('It is working!')
}
}
函数myController($scope、$compile、$element){
//创造新元素
var newElement=$('Hello World')
//编译元素,并将其分配给当前范围
$compile(新元素)($scope)
//将元素附加到您想要的任何位置。例如,添加到当前控制器元素
newElement.appendTo($element)
$scope.hello=function(){
警报('正在工作!')
}
}
更多信息:只需尝试使用
$compile()($scope)
差不多
var domElement = $compile('your javascript to create dom elements')($scope);
然后需要将DOM元素附加到页面中
希望这有帮助。我建议使用简单的onclick,并通过angular element()访问函数和变量。。。。。玩得开心;)
您是否在视图中使用了任何控制器?你能添加完整的代码吗?完整的代码非常大,但是有一个控制器。它被称为
categoryTree
请确保使用ng controller=“categoryTree”
将所有a
s放在div
中。另外,为什么要使用javascript函数?您可以使用ng repeat
。因为它是一个复杂的树,使用API获取数据,然后进行大量的操作,我认为ng repeat无法帮助我。树是使用简单的javascriptcreateElement
函数构建的。有一个绑定。问题是所有新元素都是在页面加载后呈现的。也许这就是angularJS不注册它们的原因吧?我想你需要compileService
像这样加载外部html,所以当我这样做时,我尝试使用{[{child}]}
绑定数据,结果得到{“0”:{“jquery1130343544230239093”:69},“上下文”:{“jquery113034352644230239093”:69},“长度”:1}
作为回应。尽管控制台中的数据看起来不错。
angular.element(angular_app_controller_element).scope().var/function()