Javascript 角度指令链接函数中的作用域是否与角度指令控制器中的$scope相同?

Javascript 角度指令链接函数中的作用域是否与角度指令控制器中的$scope相同?,javascript,angularjs,Javascript,Angularjs,Javascript: angular .module('app', []) .directive('compileExample', compileExample); function compileExample() { return { restrict: 'E', scope: {}, compile: function(tElement, tAttrs) { angular.element(tElement).ap

Javascript:

angular
  .module('app', [])
  .directive('compileExample', compileExample);
  function compileExample() {
    return {
      restrict: 'E',
      scope: {},
      compile: function(tElement, tAttrs) {
        angular.element(tElement).append("My name is {{name}}");
      },
      controller: function($scope, $element) {
        $scope.name = "Liam";
      },
    }
  }
HTML:


如果您在指令定义对象中进行了编译,它会禁用您在编译之外指定的任何默认post链接函数。。。链接仅在直接从编译返回时才可用于编译。。希望有更多角度经验的人能够详细说明

指令链接函数和指令控制器函数之间的一个重要区别是参数的提供方式

控制器函数参数是按名称注入的

  //This will work
  controller: function($element, $scope) {
      $scope.name = "Liam";
  },

  //AND this will work
  controller: function($http, $scope, $element) {
       $scope.name = "Liam";
  },
  //This will work
  link: function(scope, element) {
    scope.name = "Liam";
  },

  //This will FAIL
  link: function(element, scope) {
    scope.name = "Liam";
  },
控制器函数参数由
$injector
服务提供,包括所有AngularJS服务以及本地
$scope
$element
$attrs
$transclude

链接函数参数由位置提供

  //This will work
  controller: function($element, $scope) {
      $scope.name = "Liam";
  },

  //AND this will work
  controller: function($http, $scope, $element) {
       $scope.name = "Liam";
  },
  //This will work
  link: function(scope, element) {
    scope.name = "Liam";
  },

  //This will FAIL
  link: function(element, scope) {
    scope.name = "Liam";
  },
链接函数参数由
$compile
服务by position提供,参数使用的名称的行为与JavaScript中通常使用的函数参数相同

有关注入局部变量的详细信息,请参阅


有关按名称注入的更多信息,请参阅。

作用域{name:'Liam'}
,然后在链接函数中调用它,它可能会工作是和是。插入指令控制器的
$scope
与作为指令链接函数preLink和postLink的第一个参数提供的作用域相同。是的,如果您在DDO中定义了
compile
属性,那么
链接
属性将被忽略。