Angular指令link()函数接收不一致的范围

时间:2016-08-03 07:28:38

标签: javascript angularjs

"use strict";

angular.module("foo")
    .directive("breadcrumbs", function($rootScope, $timeout) {
    return {
        replace: true,
        scope: false,
        templateUrl: '/js/shared/directives/breadcrumbs.tpl.html',
        link: function(scope, element, attrs, controller, transcludeFn){
            console.debug(scope.parent);
            ...

有时scope.parent是当前控制器的范围,有时它是$rootScope。我发现当我的自定义指令使用时如下:

<breadcrumbs></breadcrumbs>

它接收控制器范围,但与ng-if:

一起使用时
<breadcrumbs ng-if="searchData"></breadcrumbs>

它接收嵌套在控制器范围内的新范围。

如何编写我的指令以始终接收控制器范围而不诉诸任何hackery(例如添加ng-if="true")?

更新:我已经更正了问题的描述。问题在于,无论是否使用ng-ifscope: false,我都会根据是否使用scope: true获取不同嵌套级别的范围。

2 个答案:

答案 0 :(得分:3)

首先,如果指令在控制器范围的上下文中,您将永远不会收到$rootScope作为指令的范围。
当您使用ng-if时,您正在接收由ng-if创建的原型继承的子范围(在本例中为控制器),因为您的指令具有scope: false(这意味着通过在最近的范围内,而不是创建一个)

您始终可以通过scope:true设置scope:{}或隔离范围来请求原型继承的子范围。

答案 1 :(得分:1)

ng-if=true剂量为您的元素创建新范围。 您可以通过更改参数

来实现这一目标

scope: false

scope: true