【发布时间】:2015-04-30 01:08:44
【问题描述】:
我想要这样的嵌套控制器...
控制器 1 - 这是父级。它由来自 REST 并使用 ngRepeat 的 JSON 数组填充。
控制器 2 - 这是孩子。它也应该从 REST 调用中获取数据,但它需要知道它在哪个父对象下。
这是一个视觉...
Parent 1
---Child 1
---Child 2
---Child 3
Parent 2
---Child 4
---Child 5
---Child 6
将通过调用 REST 服务并传递有关父级的信息来填充子级。
有意义吗?
这是我构建的一些 HTML...
<div ng-app="App">
<div ng-controller="spRisks">
<table width="100%" cellpadding="10" cellspacing="2" class="employee-table">
<tr ng-repeat="risk in Risks">
<td>
<table width="100%" cellpadding="10" cellspacing="2" class="employee-table">
<tr id="{{risk.Id}}RiskDesc">
<td>{{risk.Risk_x0020_Description}}</td>
</tr>
<tr id="{{risk.Id}}RiskControls">
<td>
<div ng-controller="spControls">
<table width="100%" cellpadding="10" cellspacing="2" class="employee-table">
<tr ng-repeat="control in Controls">
<td id="{{control.Id}}Control">{{control.Title}}</td>
<td>
<input type="radio" name="{{control.Id}}Answer" value="Yes">Yes
<input type="radio" name="{{control.Id}}Answer" value="No">No
</td>
<td>
<textarea id="{{control.Id}}Comment"></textarea>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</div>
这是我正在处理的一些填充父控制器的代码...
<script>
function getDataWithCaml(listName, caml) {
var endpoint = "https://myteamsite.sharepoint.com//_api/web/lists/GetByTitle('" + listName + "')/GetItems(query=@v1)?@v1={\"ViewXml\":\"'" + caml + "'\"}";
return jQuery.ajax({
url: endpoint,
method: "POST",
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose"
}
});
}
var App = angular.module('App', ['ngRoute'])
App.controller('spRisks', function ($scope, $http) {
var caml = "<View><Query><Where><Eq><FieldRef Name='Owner'/><Value Type='Integer'><UserID/></Value></Eq></Where></Query></View>";
var ownerData = getDataWithCaml("Owners", caml);
ownerData.success(function (data) {
var arrayOfExpressions = [];
for (var i = 0; i < data.d.results.length; i++){
arrayOfExpressions.push(CamlBuilder.Expression().LookupMultiField("Process_x0020_Owner_x0020_Title").EqualTo(data.d.results[i].Title));
}
var newCaml = new CamlBuilder().View().Query().Where().All(arrayOfExpressions).ToString();
newCaml = newCaml.replace(/"/g, '\'');
var jsonData = getDataWithCaml("Risks", newCaml);
jsonData.success(function (jsonDataResults) {
$scope.$apply(function(){$scope.Risks = jsonDataResults.d.results;});
});
});
});
function replaceAll(string, find, replace) {
return string.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}
</script>
【问题讨论】:
-
Make sense不是一个真正的问题。你有什么具体问题?您的服务代码在哪里?一个指令也可能是实用的,但你真的没有提供很多工作 -
我认为很明显我正在寻找有关如何构建它的指导。我没有任何工作。我需要帮助弄清楚如何去做。
-
至少在 html 中创建一个模拟它需要做什么。也许您可以在第一个回调中发出辅助请求,然后简单地使用指令将数据传递给重复元素
-
我添加了一些我现在拥有的代码,并添加了一些 HTML 用于我希望孩子们去的地方。
-
而不是
ng-controller作为子级,如果它是一个指令,则可以传递发出请求所需的父数据并在指令中使用相同的控制器。使用$http而不是$.ajax将使您的应用程序对角度更友好,因为$http返回$q角度中使用的承诺
标签: javascript json angularjs rest