数据在控制台中打印,分配给$scope但不以 HTML 打印
The Data is printed in console, Assigned to $scope but NOT printing in HTML
更新
问题:让我尝试用一两行来解释我想要什么,在演示 1 中,当我单击"编辑"按钮时,我使用了 Angular 数据表,数据不会出现在编辑形式中,而在演示 2 中我没有使用任何数据表,但数据清楚地以编辑形式出现,我希望数据使用数据表出现在演示 1 中。数据在 $scope.update 中,但由于某些原因它没有出现在 HTML 中,而使用相同的 HTML 它在没有数据表的情况下完美运行。
演示1:http://plnkr.co/edit/EXXbkPUHfxcZ3blzvMaz?p=preview
演示2:http://plnkr.co/edit/QYZzmJNwWTQaIgvUkRzQ?p=preview
背景
最初在左侧,数据是从包含一种输入类型和一种选择(殖民地类型)的表单中插入的,有两种表单插入,左侧的更新表单一个用于插入,一个用于编辑,当插入表单可见时,编辑表单被隐藏,反之亦然, 在右侧,数据列表在数据表的帮助下显示,以及"编辑"和"删除"按钮,重要的是按钮是在数据表代码内部制作的,而不是在HTML页面上制作的,现在删除和插入工作绝对正常,但是编辑!不,它没有。
问题
情况 1:(当我使用数据表时)当单击"编辑"按钮(在数据表中编码)时,将发送一个 ID,在下图中,ID 被控制台为"47",然后发出一个$http请求,该请求带来了数据并打印在控制台中。但是当我尝试将值注入回更新表单时,它不起作用,尽管当我控制台$scope时,这些值被注入到更新对象中,但不在 HTML 页面上打印。
情况 2:(当我不使用数据表时)如果我不使用数据表并单击"编辑"按钮,则一切正常,数据将注入更新对象并打印在HTML页面上。
网页:
如果使用数据表
<!-- IF DataTables are Used For printing the Data on Right Side-->
<div ng-controller="colony_Controller as Main_Module">
<table class="table table-striped table-bordered" align="center" datatable="" dt-options="Main_Module.dtOptions" dt-columns="Main_Module.dtColumns" class="row-border hover">
</table>
如果未使用数据表
<!-- If DataTables are NOT Used for Printing the Data on Right Side -->
<table class="table table-striped table-bordered">
<thead>
<tr>
<th style="width: 323px;" aria-label="">Colony Name</th>
<th style="width: 170px;" aria-label="">Actions</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="colony in es_colony_details" >
<td style="width: 323px;" aria-label="">{{colony.es_colony_name}}</td>
<td>
<button ng-click="EditColonyData(colony.es_colony_id)" class="btn btn-primary">
<i class="icon-edit"></i> Edit</button>
<button ng-click="DeleteColonyData(colony.es_colony_id)" class="btn btn-danger">
<i class="icon-remove icon-white"></i> Delete</button>
</td>
</tr>
</tbody>
</table>
控制器
Main_Module.controller('colony_Controller', function colony_Controller($window, $scope, $http, bootbox, $compile, DTOptionsBuilder, DTColumnBuilder, SimpleHttpRequest, DelMainRecPicRecUnlinkPic, message)
{
$scope.field = {};
$scope.update = {};
var dtInstance = {};
/********************************** FETCH DATA START *******************************/
$http.get('http://localhost:3000/api/SELECT/es_colony_type').success(function successCallback(data)
{
$scope.es_colony_type = data.es_colony_type;
//console.log(data.es_colony_type);
});
// ONLY USED WHEN Datatable are NOT
//$http.get("http://localhost:3000/api/SELECT/es_colony").success(function successCallback(data)
//{
// $scope.es_colony_details = data.es_colony;
// console.log(data.es_colony);
//});
/********************************** FETCH DATA END *********************************/
/********************************** DISPLAY DATA START *******************************/
var vm = this;
vm.dtOptions = DTOptionsBuilder
.fromFnPromise(function()
{
return $http.get('http://localhost:3000/api/SELECT/es_colony')
.then(function(response)
{
return response.data.es_colony;
});
})
.withOption('order', [0, 'desc'])
.withDisplayLength(5)
.withPaginationType('simple_numbers')
.withOption('createdRow', function(row, data, dataIndex)
{
$compile(angular.element(row).contents())($scope);
})
vm.dtColumns =
[
DTColumnBuilder.newColumn('es_colony_name').withTitle('Colony'),
DTColumnBuilder.newColumn(null).withTitle('Actions').notSortable().withOption('width', '31%')
.renderWith(function(data, type, full, meta)
{
return '<button class="btn btn-primary" ng-click="EditColonyData(' + data.es_colony_id + ');">' +
'<i class="icon-edit"></i> Edit' + '</button> ' +
'<button class="btn btn-danger" ng-click="DeleteColonyData(' + data.es_colony_id + ');">' +
'<i class="icon-remove icon-white"></i> Delete' + '</button>';
})
];
$scope.EditColonyData = function(id)
{
console.log(id);
$http.get('api/SELECTBYID/es_colony/es_colony_id/'+id)
.success(function(data)
{
console.log(data);
console.log($scope);
$scope.YesEdit = true;
$scope.update = data.es_colony[0];
// **This is where I'm injecting data Back to $scope object**
$scope.update.es_colony_type_id = data.es_colony[0].es_colony_type_id;
});
};
您正在混合控制器模型的$scope
和this
。
由于您使用的是controllerAs
别名....您的所有数据模型都需要绑定到控制器中的this
,或者您需要摆脱控制器的别名,只使用$scope
大多数人会建议使用别名和this
正如@charlietfl在他的回答中提到的,您使用 dataTables
的示例错误地分配了同一个控制器两次,一次使用 ng-controller="colony_Controller"
,一次使用 ng-controller="colony_Controller as Main_Module
。 控制器第二个副本中的数据表将无法访问第一个控制器中的变量。
<div ng-controller="colony_Controller">
....
<div ng-controller="colony_Controller as Main_Module">
<table align="center" datatable="" dt-options="Main_Module.dtOptions" dt-columns="Main_Module.dtColumns" class="row-border hover">
</table>
</div>
</div>
要更正此问题,您需要选择使用第一种语法($scope
)或第二种语法(controller as
),并确保所有代码都使用相同的格式。
在此修改版本中,dtOptions
和 dtColumns
已移至 $scope
,并删除了额外的控制器:
$scope.dtOptions = DTOptionsBuilder
.fromSource('data_colony.json')
...
$scope.dtColumns = [
...
];
<div ng-controller="colony_Controller">
...
<div>
<table align="center" datatable="" dt-options="dtOptions" dt-columns="dtColumns" class="row-border hover">
</table>
</div>
</div>
http://plnkr.co/edit/GB0IIQQoEaLN0QPBSjCz?p=preview
- 使用javascript将动态表从一个html页面打印到另一个html页
- JavaScript打印功能使日历停止工作
- AngularJS:ng之后,重复$scope值未按预期更新
- esri javascript异步打印
- 文本框不是从Javascript/Asp.net中的对话框中打印出来的
- $ionicplatform内的$scope不;不起作用
- jQuery/JavaScript在线公文包表单-打印样式表
- 如何打印嵌套对象的所有值
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 使用$scope方法时的ControllerAs语法
- 打印预览没有应用程序页眉和页脚的html表格
- 正在打印图表上的文本
- 如何将ngrepeat下的ngmodel绑定到$scope
- 另一个if(!$scope.$$phase)$scope$apply()szenario-需要帮助才能通关
- Rhino打印功能
- 使用AngularJS Directive WHITOUT$scope创建一个动态html元素
- $scope变量被视为字符串AngularJs
- ng在更新$scope后重复不更新信息
- 数据在控制台中打印,分配给$scope但不以 HTML 打印
- Ionic应用程序不打印$scope