AngularJS:在createElement之后点击ng(' div')

时间:2015-02-25 20:03:45

标签: javascript angularjs angularjs-ng-click

在使用AngularJS加载应用后,我使用div创建了一些createElement('div')(使用Ajax)。 在每个div,我将ng-click设置为

elem.setAttribute("ng-click","nameValue='"+data.name+"'");

并在html中看到

<div ng-click="nameValue='Simone'">Click</div>

但它不起作用。它可以工作,如果我把它放在html中,但如果我用Ajax动态创建div,它就不起作用。

编辑:感谢您的回复。我试着更好地解释我的“项目”(我正在研究AngularJS)

在我的应用中,使用ngRoute我加载了主页模板。

然后在HomePageController中我调用一个函数来在Ajax连接之后创建帖子。

直到这里一切都好。

解决我的问题:

app.controller('HomePageController',['$scope', function($scope){
  ....
  createPostWithAjax($compile)
  ....
}]);

//ajax function
function createPostWithAjax($compile){
  //after ajax connection
  $compile("div.postCreateAfterCompilation")($scope);
}

这是对的吗?或者我完全改变了方法?

3 个答案:

答案 0 :(得分:2)

您需要使用以下命令编译html元素:

$compile(elem)($scope)

您可能希望制定一个指令来处理此代码。以这种方式编写HTML并不是角度最好的方法。查看指令文档here

答案 1 :(得分:1)

这不是有角度的方式。当您像这样编写HTML时,Angular并不知道它,也不会“评估”它。

您需要对其进行编译才能通过angular进行处理:

$compile( elem )($scope)

但如果你给我们更多关于这方面的背景信息,我们可以帮助你做 Angular方式。您可能不必以这种方式编写HTML,而是依赖于特定的指令。这只是你想要了解更多,如果你对这个解决方案没问题就好了。

答案 2 :(得分:0)

或者您可以查看此示例

function compile(element){
  var el = angular.element(element);    
  $scope = el.scope();
  $injector = el.injector();
  $injector.invoke(function($compile){
      $compile(el)($scope)
  })     
}

http://jsfiddle.net/r2vb1ahy/