"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-if
或scope: false
,我都会根据是否使用scope: true
获取不同嵌套级别的范围。
答案 0 :(得分:3)
首先,如果指令在控制器范围的上下文中,您将永远不会收到$rootScope
作为指令的范围。
当您使用ng-if
时,您正在接收由ng-if
创建的原型继承的子范围(在本例中为控制器),因为您的指令具有scope: false
(这意味着通过在最近的范围内,而不是创建一个)
您始终可以通过scope:true
设置scope:{}
或隔离范围来请求原型继承的子范围。
答案 1 :(得分:1)
ng-if=true
剂量为您的元素创建新范围。
您可以通过更改参数
这
scope: false
要
scope: true