当通过另一个javascript函数加载HTML时,单击“不工作”

当通过另一个javascript函数加载HTML时,单击“不工作”,javascript,html,angularjs,Javascript,Html,Angularjs,我有一个javascript函数,它从JSON数据构建一个树,并创建一个锚定标记元素列表,如: 一些数据 此列表在页面加载后填充。此ng单击未在控制器上注册。这是我的控制器: catalog.controller('categoryTree',['$scope',函数($scope){ $scope.shareParent=函数(父级){ console.log(父级) } }]); 数据永远不会显示在控制器上。我是一个新手,所以我可能在这里做了一些非常错误的事情。我甚至尝试调用$scope

我有一个javascript函数,它从JSON数据构建一个树,并创建一个锚定标记元素列表,如:

一些数据
此列表在页面加载后填充。此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无法帮助我。树是使用简单的javascript
createElement
函数构建的。有一个绑定。问题是所有新元素都是在页面加载后呈现的。也许这就是angularJS不注册它们的原因吧?我想你需要
compileService
像这样加载外部html,所以当我这样做时,我尝试使用
{[{child}]}
绑定数据,结果得到
{“0”:{“jquery1130343544230239093”:69},“上下文”:{“jquery113034352644230239093”:69},“长度”:1}
作为回应。尽管控制台中的数据看起来不错。
angular.element(angular_app_controller_element).scope().var/function()