请求前清除之前的数据
Clear previous data before request
我有一个 HTML 模板,它从控制器的数组中加载数据并将它们保存在 table 中。我还有一个指令,它对 table 行进行嵌入。正在根据 API 请求填充数据数组。在新请求之后,我将请求结果合并到我的 table 中。正在为每个请求添加一组行,而不是清除以前的结果。
我调试了我的控制器代码以检查我的阵列状态,并且它在每次请求之前被清除。这是肯定的。然而,新的结果被添加到以前的结果中。我认为原因可能在我的嵌入指令模板中。
模板看起来像:
<div class="row">
<div class="col-md-12">
<div id="results" ng-show="results.length > 0">
<table class="table result-table">
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="result in results" my-result></tr>
</tbody>
</table>
</div>
</div>
</div>
这是我的嵌入指令的代码:
angular.module('app').directive('myResult',
['$compile',
function ($compile) {
return {
transclude: true,
templateUrl: '/Scripts/app/templates/resultTemplate.html',
compile: function (tElement, tAttr, transclude) {
var contents = tElement.contents().remove();
var compiledContents;
return function (scope, iElement, iAttr) {
if (!compiledContents) {
compiledContents = $compile(contents, transclude);
}
compiledContents(scope, function (clone, scope) {
iElement.replaceWith(clone);
});
};
}
}
}]);
最后是用于嵌入的模板:
<tr class="big-bord">
<td colspan="4"><h3>{{result.fullName}}</h3></td>
</tr>
<tr ng-repeat="item in result.items">
<td>{{item.value1}}</td>
<td>{{item.value2}}</td>
<td>{{item.value3}}</td>
<td>{{item.value4}}</td>
</tr>
如何在每次 API 请求之前清除我的结果?
我解决了我的问题。原来一个table内允许有多个
标签。所以我只是将我的 ng-repeat 移动到 标签:
<tbody ng-repeat="result in results">
<tr class="big-bord">
<td colspan="4"><h3>{{result.fullName}}</h3></td>
</tr>
<tr ng-repeat="item in result.items">
<td>{{item.value1}}</td>
<td>{{item.value2}}</td>
<td>{{item.value3}}</td>
<td>{{item.value4}}</td>
</tr>
</tbody>
所以,我根本不需要任何指令。
我有一个 HTML 模板,它从控制器的数组中加载数据并将它们保存在 table 中。我还有一个指令,它对 table 行进行嵌入。正在根据 API 请求填充数据数组。在新请求之后,我将请求结果合并到我的 table 中。正在为每个请求添加一组行,而不是清除以前的结果。
我调试了我的控制器代码以检查我的阵列状态,并且它在每次请求之前被清除。这是肯定的。然而,新的结果被添加到以前的结果中。我认为原因可能在我的嵌入指令模板中。
模板看起来像:
<div class="row">
<div class="col-md-12">
<div id="results" ng-show="results.length > 0">
<table class="table result-table">
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="result in results" my-result></tr>
</tbody>
</table>
</div>
</div>
</div>
这是我的嵌入指令的代码:
angular.module('app').directive('myResult',
['$compile',
function ($compile) {
return {
transclude: true,
templateUrl: '/Scripts/app/templates/resultTemplate.html',
compile: function (tElement, tAttr, transclude) {
var contents = tElement.contents().remove();
var compiledContents;
return function (scope, iElement, iAttr) {
if (!compiledContents) {
compiledContents = $compile(contents, transclude);
}
compiledContents(scope, function (clone, scope) {
iElement.replaceWith(clone);
});
};
}
}
}]);
最后是用于嵌入的模板:
<tr class="big-bord">
<td colspan="4"><h3>{{result.fullName}}</h3></td>
</tr>
<tr ng-repeat="item in result.items">
<td>{{item.value1}}</td>
<td>{{item.value2}}</td>
<td>{{item.value3}}</td>
<td>{{item.value4}}</td>
</tr>
如何在每次 API 请求之前清除我的结果?
我解决了我的问题。原来一个table内允许有多个
标签。所以我只是将我的 ng-repeat 移动到 标签:<tbody ng-repeat="result in results">
<tr class="big-bord">
<td colspan="4"><h3>{{result.fullName}}</h3></td>
</tr>
<tr ng-repeat="item in result.items">
<td>{{item.value1}}</td>
<td>{{item.value2}}</td>
<td>{{item.value3}}</td>
<td>{{item.value4}}</td>
</tr>
</tbody>
所以,我根本不需要任何指令。