我的場景是通過傳遞腳本標記傳遞的數據來使用javascript創建動態表。我的JavaScript代碼解析提供的json並生成表頭和表體。生成表體以及角度綁定方法{{variable_name}}
所需的標籤。如何將範圍數據綁定到使用Javascript動態生成的模型?
但是在創建DOM之後,我需要將範圍重新應用到表ng-repeat
。
<html>
<head>
<title>dynamic table</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<script src="js/angular.min.js"></script>
<script src="js/jquery.min.js"></script>
<script type="text/javascript">
var orderByField = "impressions";
var reverseSort = "false";
var myList = [{firstName: 'John',lastName: 'Doe',age: 30,etc : 'heelo'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Sue',lastName: 'Banter',age: 21,etc: 'cool'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'},{firstName: 'Frank',lastName: 'Burns',age: 54,etc: 'world'}];
function addAllColumnHeaders(myList, selector)
{
var columnSet = [];
var headerTr$ = $('<tr/>');
var aStart = '<a href="#" ng-click="orderByField=\'';
var aMid = '\'; reverseSort = !reverseSort">';
var aEnd = '</a>';
for (var i = 0 ; i < myList.length ; i++) {
var rowHash = myList[i];
for (var key in rowHash) {
keyLink = aStart+key+aMid+key+aEnd;
if ($.inArray(key, columnSet) == -1){
columnSet.push(key);
headerTr$.append($('<th/>').html(keyLink));
}
}
}
$(selector).append(headerTr$);
return columnSet;
}
function createAngularTableDataPlaceholder(myList, selector)
{
var columnSet2 = [];
var headerTr2$ = $('<tr/>').attr('ng-repeat','field in myList|orderBy:orderByField:reverseSort');
var aStart2 = '<td>{{field.';
var aEnd2 = '}}</td>';
for (var i = 0 ; i < myList.length ; i++) {
var rowHash2 = myList[i];
for (var key2 in rowHash2) {
keyLink2 = aStart2+key2+aEnd2;
//alert(keyLink);
if ($.inArray(key2, columnSet2) == -1){
columnSet2.push(key2);
headerTr2$.append($('<td/>').html(keyLink2));
}
}
}
$(selector).append(headerTr2$);
return columnSet2;
}
</script>
</head>
<body>
<div class="container">
<section ng-app="app" ng-controller="MainCtrl" ng-init="getMember(myList)">
<table class="table" id="excelDataTable" border="1">
<thead id="thead">
</thead>
<tbody id="tbody">
<!--tr ng-repeat="field in myList|orderBy:orderByField:reverseSort">
</tr-->
</tbody>
</table>
</section>
</div>
<script>
var app = angular.module('app', []);
app.controller('MainCtrl', ['$scope', '$window', function($scope, $window) {
addAllColumnHeaders(myList, '#thead');
createAngularTableDataPlaceholder(myList, '#tbody');
console.log("header and columns done");
$scope.orderByField = $window.orderByField;
console.log($scope.orderByField);
$scope.reverseSort = false;
console.log($scope.reverseSort);
angular.element(document).ready(function() {
$scope.myList = $window.myList;
console.log("got "+$scope.myList);
});
}]);
</script>
</body>
</html>
電流輸出我得到是 - 但問題是,角結合其所有的渲染時間碼。如何在JavaScript完成後使用$scope.watch
方法或$scope.apply
方法來完成此操作。 我試圖做到這一點使用
angular.element(文件)。就緒(函數())
,但是這不是正確的方式,我想。
我是新角度。請指導我。謝謝!
當然,用更好的方式來選擇你的元素你不應該首先用jQuery創建dom。數據應該傳遞到控制器,並讓角度生成dom – charlietfl
我會把你所有的js邏輯放在角度控制器中,以 –
開頭。強烈建議閱讀[thinking-in-angularjs-if-i-have-a-jquery -background](http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background) – charlietfl