Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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
Angularjs 兄弟姐妹如何在以下指令结构下共享其作用域_Angularjs_Angularjs Directive - Fatal编程技术网

Angularjs 兄弟姐妹如何在以下指令结构下共享其作用域

Angularjs 兄弟姐妹如何在以下指令结构下共享其作用域,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有以下指令结构 <test-widget-body> <test-task-list-filter> </test-task-list-filter> <test-task-list> <test-datatable config="dtConfig" columns="dtColumns" api="dtApi"></test-datata

我有以下指令结构

 <test-widget-body>
         <test-task-list-filter>
         </test-task-list-filter>
         <test-task-list>
                <test-datatable config="dtConfig" columns="dtColumns" api="dtApi"></test-datatable>
         </test-task-list>
 </test-widget-body>
testTaskListFilter

angular.module('testTask').directive('testTaskListFilter', function () {
  return {
    restrict: 'E',
    controller: 'testListFilterController',
    templateUrl: '/app/test/directives/test-list/test-list-filter.html'
  };
});
testWidgetBody

angular.module('testWidgetGrid').directive('testWidgetBody', function () {
  return {
    templateUrl: 'test.html',
    link: function ($scope, element) {

}

}
在这里,我可以访问
dtConfig
dtColumns
dtApi
控制器中的
testListFilterController
对象。 这是怎么可能的,因为
是兄弟姐妹。 谁能解释一下这种情况下发生了什么


注意:我可以在执行某些单击操作时访问该对象,而不是在指令呈现时。

如果查看
testTaskListFilter
指令和
testTaskList
指令的声明,它们都没有隔离作用域。您可以通过在指令中执行以下操作之一来声明隔离作用域:
scope:true
scope:{}
(就像在
testDatatable
指令中一样)

因此,任何不声明自己作用域的指令都会继承其父指令的作用域。因此,
testTaskListFilter
testTaskList
都使用相同的作用域。这意味着你可以

访问
dtConfig
dtColumns
dtApi
控制器中的对象

下面是理解作用域和作用域继承的基本方法

angular.module('testTask').directive('testTaskListFilter', function () {
  return {
    restrict: 'E',
    controller: 'testListFilterController',
    templateUrl: '/app/test/directives/test-list/test-list-filter.html'
  };
});
angular.module('testWidgetGrid').directive('testWidgetBody', function () {
  return {
    templateUrl: 'test.html',
    link: function ($scope, element) {

}

}