在我的研究之后,我发现我需要使用孤立的范围来实现我的目标。 让我给你一个关于我的应用程序如何工作的方案。
我有一个用ASP.NET编写的web服务。我使用包含在函数中的jQuery.ajax在JSON中接收数据:
function getData(id) {
var params = { "PlannerId": id };
jQuery.ajax({
type: "POST",
url: "Default.aspx/getData",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(params),
dataType: "json",
traditional: true,
async: false,
success: function (msg) {
$scope.allSeminars = allSeminars.concat(msg.d.SeminarDays);
}
});
return $scope.allSeminars;
}
该功能放在控制器中,让我们说" dataController"。
通常一次显示我的指令。我用一些" id"来调用我的函数(也在我的控制器中)我从动态输入中获得。
getData(jQuery('div[display-data]').parent().find('input').val());
然后调用指令:
<div display-data></div>
,它适用于一个数据和一个指令。
现在我想在我的网页上显示我的指令两次,每次都有不同的数据。
我在我的指令中添加了隔离范围:
rfg.directive("displayData", ['someService', function (someService) {
return {
restrict: "A",
scope: {
seminar: '=sem'
},
templateUrl: '../../template.tpl.html',
controller: 'dataController',
现在我显示我的指令:
<div display-data sem="sem0"></div><br>
<div display-data sem="sem1"></div>
我的控制器看起来像这样:
var semId = jQuery('div[display-data]');
$scope.sem0 = getData(jQuery(semId[0]).parent().find('input').val());
$scope.sem1 = getData(jQuery(semId[1]).parent().find('input').val());
我还尝试在我的模板中的ng-repeat中添加&#34;研讨会&#34;(指令范围中指定的那个),但没有成功。
any1是否有一些线索我做错了什么,以及如何以不同的方式替换来自.ajax的get数据,而不是直接从控制器调用负责该函数的函数。
谢谢!
答案 0 :(得分:0)
我认为你的所有逻辑都是错误的,你不应该在AngularJS中使用jQuery。
您可以将jQuery.ajax()
替换为$http
或ngRessource
- &GT; https://docs.angularjs.org/api/ng/service/$http
- &GT; https://docs.angularjs.org/api/ngResource
而不是jQuery(semId[0]).parent().find('input').val()
使用ng-model
- &GT; https://docs.angularjs.org/api/ng/directive/ngModel
有了这个,你可以从良好的基础开始。