Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:使用现有控制器将数据传递给指令_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS:使用现有控制器将数据传递给指令

Javascript AngularJS:使用现有控制器将数据传递给指令,javascript,angularjs,Javascript,Angularjs,我将尝试对我试图解决的问题进行概述: 在我网站的一个页面上,我加载了一个数据集。这些数据需要组织成一个网格。当路由到页面时,数据被解析,并且可以在全局页面控制器中访问 对于网格,我试图制定一个指令,负责正确放置数据项(根据一些规则,数据是通过的) 我想在主页中使用类似的内容: <data-grid demoData="dataset"></data-grid> 但我似乎无法访问gridCtrl中的dat。 或者我应该使用链接函数还是编译函数?如果您想检索'demoDat

我将尝试对我试图解决的问题进行概述:

在我网站的一个页面上,我加载了一个数据集。这些数据需要组织成一个网格。当路由到页面时,数据被解析,并且可以在全局页面控制器中访问

对于网格,我试图制定一个指令,负责正确放置数据项(根据一些规则,数据是通过的)

我想在主页中使用类似的内容:

<data-grid demoData="dataset"></data-grid>
但我似乎无法访问gridCtrl中的dat。
或者我应该使用链接函数还是编译函数?

如果您想检索'demoData'属性中的数据集,您肯定需要使用链接函数:

cardGrid.directive('cardGrid', function(){
return {
    restrict: 'E',
    templateUrl: 'views/partials/cardGrid.html',
    replace:true,
    scope: {
      demoData: '='
    },
    link : function(scope, element, attrs) {
       console.info(scope.demoData);
    }
};
});
控制器选项是一种特殊类型的控制器:指令控制器。此控制器仅在该指令的上下文中定义(并且可以注入到其他指令中),但它可能不是您要寻找的

编辑:要回复您的评论,如果您希望缩短链接功能的大小,您确实可以使用控制器选项。
请参阅此示例:

好,我现在将尝试将所有逻辑从控制器移动到链接函数。唯一糟糕的是链接函数会变得非常大,这会降低指令的可读性。会让你了解最新情况。
cardGrid.directive('cardGrid', function(){
    return {
        restrict: 'E',
        templateUrl: 'views/partials/cardGrid.html',
        replace:true,
        controller: 'gridCtrl',
        scope: {
           demoData: '='
        }
    };
});
cardGrid.directive('cardGrid', function(){
return {
    restrict: 'E',
    templateUrl: 'views/partials/cardGrid.html',
    replace:true,
    scope: {
      demoData: '='
    },
    link : function(scope, element, attrs) {
       console.info(scope.demoData);
    }
};
});