Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 “使用”有什么区别;要求:ngController“;及;控制员:“;在指令中?_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Angularjs “使用”有什么区别;要求:ngController“;及;控制员:“;在指令中?

Angularjs “使用”有什么区别;要求:ngController“;及;控制员:“;在指令中?,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我正在切换使用以下命令创建的指令: return { restrict: 'E', templateUrl: '/src/templates/noise/swatches.html', link: link, controller: "swatchesController" }; 及 使用: return { restrict: 'E', templateUrl: '/src/templates/noise/swatches.html',

我正在切换使用以下命令创建的指令:

return {
    restrict: 'E',
    templateUrl: '/src/templates/noise/swatches.html',
    link: link,
    controller: "swatchesController"
};

使用:

return {
    restrict: 'E',
    templateUrl: '/src/templates/noise/swatches.html',
    link: link,
    require: "ngController"
};

这似乎会对现有手表产生意想不到的副作用,这些手表属于针对swatches指令指定的范围变量的其他指令。据我所知,新方法引入了一个新的作用域,因此将关注的变量分配给父作用域似乎应该是可行的,但这些关注点拒绝触发

上述两种方法之间有根本区别吗?

需要注意的几点:

  • 您应该使用controllerAs属性来隔离 控制器。这被认为是最佳实践。你可以看
  • 理想情况下,您应该在指令本身中提供控制器。你这样做会导致斯帕格蒂望远镜。将指令作用域与父作用域分开。如果需要,可以将所需的依赖项传递给指令
  • 需要注意的几点:

  • 您应该使用controllerAs属性来隔离 控制器。这被认为是最佳实践。你可以看
  • 理想情况下,您应该在指令本身中提供控制器。你这样做会导致斯帕格蒂望远镜。将指令作用域与父作用域分开。如果需要,可以将所需的依赖项传递给指令
  • 注意:您可以传递多个控制器

    return {
        restrict: 'E',
        templateUrl: '/src/templates/noise/swatches.html',
        link: link,
        require: ["ngDirective1", "ngDirective2"], //Get the controller of that directive
        link : function(scope, element, attributes, controllers){
          var ctrl1 = controllers[0];
          var ctrl2 = controllers[1];
    
          //Require can be a string or, as this example, an array.
    
        }
    
    };
    
    在require中传递的指令必须在您的指令中。 如果不是,您可以说:使用
    ^
    在容器元素上查找它:
    要求:“^ngDirective”

    注意:您可以传递多个控制器

    return {
        restrict: 'E',
        templateUrl: '/src/templates/noise/swatches.html',
        link: link,
        require: ["ngDirective1", "ngDirective2"], //Get the controller of that directive
        link : function(scope, element, attributes, controllers){
          var ctrl1 = controllers[0];
          var ctrl2 = controllers[1];
    
          //Require can be a string or, as this example, an array.
    
        }
    
    };
    
    在require中传递的指令必须在您的指令中。 如果不是,您可以说:使用
    ^
    在容器元素上查找它:
    要求:“^ngDirective”

    检查此项,手表分配在哪里?“它们在哪里无法触发?”Davidtroon这些手表被分配到另一个指令上,这是swatches指令的兄弟指令。当swatchesController更新其一个属性时,它们无法触发。我将尝试创建一个可能的最简单示例。检查此项。手表分配在哪里?“它们在哪里无法触发?”Davidtroon这些手表被分配到另一个指令上,这是swatches指令的兄弟指令。当swatchesController更新其一个属性时,它们无法触发。我将尝试创建一个最简单的示例。