Angularjs 访问angular指令模板中的隔离作用域

Angularjs 访问angular指令模板中的隔离作用域,angularjs,angularjs-scope,angular-directive,Angularjs,Angularjs Scope,Angular Directive,我目前正在编写一个angular指令,它使用不同HTML文件中的模板和独立模板。该指令通过@获取一些字符串到其作用域,该值在控制器函数中可用。 不知何故,它不能通过HTML模板中的{{}使用。为什么会这样?我怎样才能改变这一点?我读了一些关于使用父作用域的模板的内容,但我不完全理解 下面是一个代码示例: angular.module('moduleName') .directive('aGreatDirective', function () { return { re

我目前正在编写一个angular指令,它使用不同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这里有一个JSFIDLE:

您的FIDLE不正确,因为您没有正确定义控制器或注入$scope。以下方法可以很好地工作:

模板:

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


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

您能添加一个JSFIDLE吗?我刚刚添加了。{{mapid}}应该是输出中的thisisthemapid,但不是。控制台语句也很奇怪。在我的控制台中,我看到了mapid属性,但$scope.mapid未定义…感谢该示例能够正常工作!你知道我真正的应用程序中的错误在哪里吗?我使用一个类似的设置和一个空的控制器(指令)一切工作。当我将一些铯代码和对角铯的依赖项复制到控制器中时,这段代码会被执行,但模板{mapid}不会被替换。我该怎么做才能找到错误?从控制台开始,看看是否有错误。那永远是你最好的选择。谢谢。我得到的唯一错误是来自里面的代码。代码找不到元素,因为id未设置为mapid。如果我手动设置那个id,我一点也不会出错。非常奇怪。然后你有一个竞争条件,你的代码在指令运行之前寻找id。如果是这样的话,听起来你开始采取了一种反角度的方法,因为你不应该在DOM中把活动从ID中赶走谢谢。是的,我在这里使用非角度代码,但指令不是包含该代码的正确方法吗?有没有一种(简单的)方法可以让代码只在指令完成其工作后运行?