Javascript AngularJS-如何从具有指定范围的指令访问$scope

Javascript AngularJS-如何从具有指定范围的指令访问$scope,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我有一个自定义指令,它有自己的作用域,它接受来自指令的DOM属性的值,但是我也希望从指令访问来自$scope的一些变量。有人能帮我做这件事吗 这是我的指令和我如何使用它 appDirectives.directive('appTemplate', function () { return { restrict: 'E', templateUrl: 'partials/templates/template.html', scope: {

我有一个自定义指令,它有自己的作用域,它接受来自指令的DOM属性的值,但是我也希望从指令访问来自
$scope
的一些变量。有人能帮我做这件事吗

这是我的指令和我如何使用它

appDirectives.directive('appTemplate', function () {
    return {
        restrict: 'E',
        templateUrl: 'partials/templates/template.html',
        scope: {
            template: '='
        },
    }
});

这是指令的模板,这里有模板值,但我想访问
$scope.rootPath

<div class="template">
    {$ ???scope.rootPath??? $}
    {$ template is accesable $}    
</div> 

{$???scope.rootPath???$}
{$template是可访问的$}

这正是将对象传递到隔离作用域的方式。如果控制器位于指令的父级,则指令将继承控制器的功能


除非您需要它有一个独立的作用域,例如,模板中的每个模板都有自己的唯一值,否则您可以像现在这样将其作为对象传入。

这正是将对象传入独立作用域的方法。如果控制器位于指令的父级,则指令将继承控制器的功能


除非您需要它具有独立作用域,例如,模板中的每个模板都有其自己的唯一值,否则您可以像现在这样将其作为对象传入。

您也可以将is用于独立作用域:

appdirections.directive('appTemplate',function(){
返回{
限制:'E',
templateUrl:'partials/templates/template.html',
范围:{
模板:“=”,
根路径:'='
},
}
});

…然后像往常一样访问它:


{$rootPath是可访问的$}
{$template是可访问的$}

可能还有其他解决方案,但这应该适合您。

您也可以将is用于隔离作用域:

appdirections.directive('appTemplate',function(){
返回{
限制:'E',
templateUrl:'partials/templates/template.html',
范围:{
模板:“=”,
根路径:'='
},
}
});

…然后像往常一样访问它:


{$rootPath是可访问的$}
{$template是可访问的$}

可能还有其他解决方案,但这应该适合您。

您似乎不必为该指令声明本地范围,属性可以在没有它的情况下访问。省略范围声明后,它将起作用,指令如下所示:

appdirections.directive('appTemplate',function(){
返回{
限制:'E',
templateUrl:'partials/templates/template.html',
转移:对
}
});

另一种方法也是可行的,就是将$scope.rootPath作为参数注入指令。

似乎您不必为指令声明本地作用域,没有它就可以访问属性。省略范围声明后,它将起作用,指令如下所示:

appdirections.directive('appTemplate',function(){
返回{
限制:'E',
templateUrl:'partials/templates/template.html',
转移:对
}
});

另一种同样有效的方法是将$scope.rootPath作为参数注入指令。

另一个选项是让
appTemplate
原型继承自父作用域,并对
template
属性使用
$parse

app.directive('appTemplate', ['$parse', function($parse) {
  return {
    restrict: 'E',
    templateUrl: 'template.html',
    link: function(scope, elem, attrs) {
      var templateGet = $parse(attrs.template);
      scope.$watch(templateGet, function(value) {
        scope.template = value;
      });
    }
  };
}]);
它可以看到最外部范围内的所有变量(
模板
根路径
等),但实际上并不依赖于
ng repeat
中迭代变量的名称。所以这两个:

<div ng-repeat="template in templates">
  <app-template template="template"></app-template>
</div>


app.directive('appTemplate', ['$parse', function($parse) {
  return {
    restrict: 'E',
    templateUrl: 'template.html',
    link: function(scope, elem, attrs) {
      var templateGet = $parse(attrs.template);
      scope.$watch(templateGet, function(value) {
        scope.template = value;
      });
    }
  };
}]);
它可以看到最外部范围内的所有变量(
模板
根路径
等),但实际上并不依赖于
ng repeat
中迭代变量的名称。所以这两个:

<div ng-repeat="template in templates">
  <app-template template="template"></app-template>
</div>


.

您计划从哪里获取rootPath的值?它是来自服务、特定于指令代码等的属性吗?它是项目的常量全局属性,我将它存储在$scope中。正因为如此,我想从指令中访问它,而不需要在$scope所在的任何地方复制/粘贴它?我在您的指令中没有看到它,因为您已经在返回对象中定义了一个范围,所以您已经为此指令创建了一个隔离范围。您可以通过链接函数公开它,但是您可以添加访问rootPath属性的代码部分吗?是什么阻止您将
rootPath
作为属性传递到指令的隔离范围<代码>作用域:{template:'=',rootpath:'@'}
内部指令。然后将rootpath作为attr传入使用该指令的位置?@Matt Pileggi:rootpath在controllers作用域中,但我正在传递模板值并为该指令创建本地作用域。也许link函数可以保存我,我不需要这个本地作用域。你打算从哪里获取rootPath的值?它是来自服务、特定于指令代码等的属性吗?它是项目的常量全局属性,我将它存储在$scope中。正因为如此,我想从指令中访问它,而不需要在$scope所在的任何地方复制/粘贴它?我在您的指令中没有看到它,因为您已经在返回对象中定义了一个范围,所以您已经为此指令创建了一个隔离范围。您可以通过链接函数公开它,但是您可以添加访问rootPath属性的代码部分吗?是什么阻止您将
rootPath
作为属性传递到指令的隔离范围<代码>作用域:{template:'=',rootpath:'@'}
in