当通过另一个javascript函数加载HTML时,Angular JS ng-click不起作用

时间:2016-03-15 07:21:41

标签: javascript html angularjs

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

<a ng-click="shareParent(4619)">Some data</a>

加载页面后会填充此列表。此ng-click未在控制器中注册。这是我的控制器:

catalog.controller('categoryTree', ['$scope',function($scope) {
    $scope.shareParent = function(parent) {
        console.log(parent)
      }
}]);

数据永远不会出现在控制器上。我是新手,所以我可能在这里做错了。我甚至尝试过调用$ scope。$ apply(),但这也没有任何好处。

anchor元素确实有一个与之关联的控制器,并且还声明了ng-app。只是ng-click无效。

编辑:

在添加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);
   });

可能有更好的方法。

4 个答案:

答案 0 :(得分:4)

在Angular中创建新的HTML元素时,必须将其连接到范围。这称为compiling

例如:

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!')
  }
}

更多信息:Angular $compile service

答案 1 :(得分:2)

尝试使用$compile() ($scope)

类似

var domElement = $compile('your javascript to create dom elements')($scope);

然后您需要将DOM元素附加到您的页面。

希望这有帮助。

答案 2 :(得分:1)

你的代码看起来很好。您是否已将HTML绑定到控制器categoryTree

答案 3 :(得分:0)

我建议使用简单的onclick和访问函数和变量通过angular element().....玩得开心;)

angular.element(angular_app_controller_element).scope().var/function()