簡體   English   中英

AngularJS:在createElement('div')之后單擊ng-click

[英]AngularJS: ng-click after createElement('div')

在使用AngularJS加載應用程序后,我使用createElement('div')創建了一些div (使用Ajax createElement('div') 在每個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連接之后創建post。

直到這里一切都好。

解決我的問題:

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

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

這是對的? 或者我完全改變了方法?

您需要使用以下命令編譯html元素:

$compile(elem)($scope)

您可能想要制定一個指令來處理此代碼。 以這種方式編寫html並不是角度來看的最好方法。 在這里查看指令文檔。

這不是有角度的方式。 當您像這樣編寫HTML時,Angular並不知道它並且不會“評估”它。

您需要編譯它才能通過angular進行處理:

$compile( elem )($scope)

但是如果你給我們更多關於它的背景信息,我們可以幫助你以Angular的方式做到這一點 您可能不必以這種方式編寫HTML,而是依賴於特定的指令。 這只是你想了解更多,如果你對這個解決方案沒問題,那就沒關系。

或者您可以查看此示例

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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM