当前位置: 首页 > 面试题库 >

为什么不能在具有独立作用域的指令模板中访问$ rootScope?

郑佐
2023-03-14
问题内容

使用隔离范围时,伪指令的模板似乎无法访问控制器(’Ctrl’)$
rootScope变量,但是该变量确实出现在伪指令的控制器中。我了解为什么控制器(’Ctrl’)$ scope变量在隔离范围中不可见。

HTML:

<div ng-app="app">
    <div ng-controller="Ctrl">
        <my-template></my-template>
    </div>

    <script type="text/ng-template" id="my-template.html">
        <label ng-click="test(blah)">Click</label>
    </script>
</div>

JavaScript:

angular.module('app', [])
    .controller('Ctrl', function Ctrl1($scope,  $rootScope) {
        $rootScope.blah = 'Hello';
        $scope.yah = 'World'
    })
    .directive('myTemplate', function() {
        return {
            restrict: 'E',
            templateUrl: 'my-template.html',
            scope: {},
            controller: ["$scope", "$rootScope", function($scope, $rootScope) {
                console.log($rootScope.blah);
                console.log($scope.yah);,

                $scope.test = function(arg) {
                    console.log(arg);
                }
            }]
        };
    });

JSFiddle

可以在没有隔离作用域的情况下访问变量-如注释隔离作用域行所示:

        // scope: {},

问题答案:

您可以使用以下方法尝试 $root.blah

工作守则

html

 <label ng-click="test($root.blah)">Click</label>

javascript

  angular.module('app', [])
    .controller('Ctrl', function Ctrl1($scope,  $rootScope) {
        $rootScope.blah = 'Hello';
        $scope.yah = 'World'
    })
    .directive('myTemplate', function() {
        return {
            restrict: 'E',
            templateUrl: 'my-template.html',
            scope: {},
            controller: ["$scope", "$rootScope", function($scope, $rootScope) {
                console.log($rootScope.blah);
                console.log($scope.yah);

                $scope.test = function(arg) {
                    console.log(arg);
                }
            }]
        };
    });


 类似资料:
  • 问题内容: 给定带有transclude和隔离范围的指令(),当链接该指令时,我具有以下范围: 我期望: 如果同一指令具有 共享作用域 而不是 隔离作用域 ,则可以得到预期的结果。 这给我带来了一个问题,因为,如果被包含的内容包含另一个具有隔离范围的指令(),则会得到: 我想使用这样的指令: 但是,这并不工作,里面,是因为不上合适的范围。 我有两个问题: 如果指令具有隔离的作用域,为什么作用域不是

  • 问题内容: 这里有角的菜鸟。我正在创建一个指令以递归显示问题树和子问题树。我正在模板中使用链接,该链接在范围内调用函数。由于某种原因,它不会调用该方法。 这是代码和小提琴http://jsfiddle.net/madhums/n9KNv/ HTML: Javascript: 任何帮助理解这一点将不胜感激。 问题答案: 您遇到范围问题。由于您在指令中使用隔离范围,因此它不再有权访问具有的控制器范围。

  • 问题内容: 我试图做一个简单的指令来显示名称并允许对其进行更改。当我在名称页上放置多个指令时,它们似乎都共享name属性。我究竟做错了什么? 问题答案: 如前面的答案中所述,AngularJS指令的默认行为是共享它们所包含的范围。此行为通过指令定义对象中的参数进行更改。 您可以在AngularJS文档的此部分中查看scope参数的文档:http : //docs.angularjs.org/api

  • 问题内容: 根据文档,a 可以是一个带有两个参数的函数,分别为和,并返回表示模板的字符串值。它将当前元素替换为HTML的内容。替换过程将所有属性和类从旧元素迁移到新元素。 该函数处理转换模板DOM。它包含三个参数,和和函数。该参数已被弃用。它返回一个函数。 似乎a 和a 函数非常相似,可以实现相同的目标。该函数定义的模板和功能修改模板DOM。但是,它可以在函数本身中完成。我看不到为什么要在函数外部

  • 如果将使用指令的元素使用ng-model 请不要使用独立的作用域(请参见可以使用ng-model与独立的作用域吗?和 为什么格式化程序不能与独立作用域一起工作? 如果指令没有修改任何作用域/模型属性,则不要创建新的作用域 如果指令封装了一组DOM元素(文档中说“一个复杂的DOM结构”),并且该指令将作为一个元素使用,或者在同一元素上没有其他指令,那么隔离作用域似乎可以很好地工作。 我知道,在一个元

  • 当在嵌入了tomcat的spring boot中运行代码时,Spring cloud consul可以像预期的那样工作。 当我们在独立的tomcat上部署代码时,它不起作用。似乎有一个Web服务器上启动领事服务注册。仅当我们在带有嵌入式 tomcat 的Spring启动内运行代码时,才会触发此事件。 https://github.com/spring-cloud/spring-cloud-cons