【问题标题】:Access isolated scope in angular directive template在角度指令模板中访问隔离范围
【发布时间】:2016-01-12 04:43:25
【问题描述】:

我目前正在编写一个角度指令,该指令使用不同 HTML 文件中的模板和隔离模板。该指令通过 @ 获取一些字符串到其范围,并且该值在控制器函数中可用。 不知何故,它无法通过 HTML 模板中的 {{}} 获得。为什么呢?我该如何改变呢?我使用父范围阅读了一些关于模板的内容,但我并不完全理解。

这是一个代码示例:

angular.module('moduleName')

.directive('aGreatDirective', function () {
    return {
        restrict: 'E',
        scope: {
            mapid: '@'
        }, 
        templateUrl: "path/to/template.html",

        controller: ['$scope', function (scope) {
            console.log($scope.mapid); // is defined
       }
    }
});

以及模板的html代码:

<div id="{{mapid}}"></div>

浏览器中的结果与它应该在的地方完全一样:

<div id="theValueOfmapid"></div>

感谢您的帮助!

PS 这是一个 jsfiddle:fiddle

【问题讨论】:

  • 可以加个jsfiddle吗?
  • 我刚做了。 {{mapid}} 应该是输出中的 thisisthemapid,但它不是。控制台语句也很奇怪。在我的控制台中,我看到了 mapid 属性,但 $scope.mapid 未定义...

标签: angularjs angularjs-scope angular-directive


【解决方案1】:

您的小提琴不正确,因为您没有正确定义控制器或 $scope 注入。以下将正常工作:

模板:

<div ng-controller="MyCtrl">
    <a-great-directive mapid="thisisthemapid"></a-great-directive>
    Some other code
</div>

js:

var myApp = angular.module('myApp', []);

myApp.controller('MyCtrl', function () {
});

myApp.directive('aGreatDirective', function() {
    return {
        restrict: 'E',
        scope: {
            mapid: '@'
        },
        template: "<div id='{{mapid}}'> {{mapid}} </div>",
        controller: ['$scope', function($scope) {
            console.log($scope.mapid); // is defined
        }
    ]}
});

Fiddle

请注意,在我的示例中,出于一致性原因,指令控制器中的注入变量应该是 $scope,而不是 scope。

【讨论】:

  • 感谢该示例有效!您是否知道我的真实应用程序中的错误在哪里?我正在使用类似的设置并使用空控制器(指令的)一切正常。当我将一些铯代码和对角度铯的依赖项复制到控制器中时,该代码将被执行,但模板 {{mapid}} 不会被替换。我该怎么做才能找到错误?
  • 从控制台开始,看看是否有任何错误。这永远是你最好的选择。
  • 谢谢。我得到的唯一错误来自里面的代码。代码找不到元素,因为 id 未设置为 mapid。如果我手动设置该 ID,我根本不会收到任何错误。很奇怪。
  • 然后你有一个竞争条件,你的代码在指令运行之前寻找 id。如果是这种情况,听起来您一开始就采取了反棱角分明的方法,因为您不应该从 DOM 中的 ID 中驱动活动
  • 谢谢。是的,我在这里使用非角度代码,但指令不是包含该代码的正确方法吗?有没有一种(简单的)方法可以让该代码仅在指令完成其工作替换后才运行?
猜你喜欢
  • 2018-11-01
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多