Angular - 两个相同的指令,具有不同的数据 - 隔离范围

时间:2015-10-30 15:49:38

标签: javascript jquery angularjs

在我的研究之后,我发现我需要使用孤立的范围来实现我的目标。 让我给你一个关于我的应用程序如何工作的方案。

我有一个用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数据,而不是直接从控制器调用负责该函数的函数。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你的所有逻辑都是错误的,你不应该在AngularJS中使用jQuery。

您可以将jQuery.ajax()替换为$httpngRessource

- &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

有了这个,你可以从良好的基础开始。