簡體   English   中英

angularjs將附加的html綁定到控制器

[英]angularjs bind appended html to controller

假設初始html代碼為:

<div id="first" ng-controller="IndexPageController">

</div>

頁面加載后,它將發出一些ajax請求並附加新的html

<div id="first" ng-controller="IndexPageController">
   <div id="appended">
      {{data}}
   </div>
</div>

我的控制器

MyApp.controller('IndexPageController', ['$scope', '$http',  function ($scope, $http) {
  $scope.data="something";
 });

由於新創建的DOM元素不會繼承賦予其已編譯模板的$ scope。 如何將dom元素綁定到控制器?

$compile服務可以滿足您的需求。

片段:

 var app = angular.module("app", []); app.controller("IndexPageController", function ($scope, $http, $compile, $timeout) { var htmlText = "<div id=\\"appended\\">" + "{{data}}" + "</div>"; var linkFn = $compile(htmlText); var content = linkFn($scope); $("#first").append(content); $scope.data = "This should change after 5 seconds..."; $timeout(function() { $scope.data = "Indeed, it is changed"; }, 5000) }); angular.bootstrap(document, ["app"]); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.9/angular.js"></script> <div> <div id="first" ng-controller="IndexPageController"> </div> </div> 

PS .:生成的HTML將正確更新。 您可以通過注入$timeout並添加以下代碼來對其進行測試:

$timeout(function() {
    $scope.data = "Indeed, it is changed";
}, 5000)

您應該使用$ compile鏈接模板和范圍

暫無
暫無

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

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