gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:56:20 24 4
gpt4 key购买 nike

"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是当前 Controller 的作用域,有时是$rootScope。我发现当我的自定义指令被这样使用时:

<breadcrumbs></breadcrumbs>

它接收 Controller 作用域,但是当与 ng-if 一起使用时:

<breadcrumbs ng-if="searchData"></breadcrumbs>

它接收一个嵌套在 Controller 范围内的新范围。

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

更新:我已经更正了问题的描述。问题是我根据是否使用 ng-if 获得不同嵌套级别的范围,无论是 scope: false 还是 scope: true被使用。

最佳答案

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

您始终可以通过设置 scope:true 或通过 scope:{} 请求独立范围来请求原型(prototype)继承的子范围。

关于javascript - Angular 指令 link() 函数接收不一致的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38737092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com