gpt4 book ai didi

angularjs:指令创建两个子范围(不是隔离范围)?以及如何获取元素的范围?

转载 作者:行者123 更新时间:2023-12-04 16:31:36 25 4
gpt4 key购买 nike

我正在编写我的 angularjs 指令,其定义如下:

return {
restrict: 'EA',
link: link,
scope: true,
transclude: true,
replace: true,
controller: controller,
template: '<div class="wizard">' +
'<div ng-transclude></div>' +
'</div>'
};

我注意到创建了两个范围:
< Scope (003)  --- parent scope of directive
< Scope (004) --- controller scope of directive which I think is child scope created by 'scope=true'. all my functions, properites defined in controller show up in this scope
< Scope (005) --- transclude scope which is empty

从文档中我期望只创建一个子范围,因为'scope = true'不会创建一个孤立的范围。这导致所有被“ng-transclude”替换的元素实际上继承了 Scope(005) 并且无法访问我在 Controller 中定义的函数/属性,因为它们位于 Scope(004) 中,它是 Scope(005) 的兄弟。

我不知道发生了什么问题,有人可以在这里放一些灯吗?

当使用 Chrome 调试器查看我的元素时,我注意到这些元素是由“ng-scope”类添加的,但是,如何将“ng-scope”与batarang 控制台中显示的范围匹配?比如显示 ng-scope 的 id。

谢谢

最佳答案

scope: true将创建一个新的子范围 prototypically inherits从 Controller 范围 - 这是范围 004。
scope: { ... }将创建一个新的子范围,它在原型(prototype)上不会从 Controller 范围继承。

无论哪种方式,都会创建一个新的子范围。

另外,因为你使用的是transclude: true ,创建另一个(嵌入的)子范围 005。嵌入的范围总是原型(prototype)继承自 Controller 范围。

正如您已经发现的那样,您在指令范围(即指令内部)上定义的属性和函数对 View 不可用,因为 View 使用了嵌入的范围。

enter image description here

上图基于以下代码:

app.directive('myDirective', function() {
return {
restrict: 'EA',
//link: link,
scope: true,
transclude: true,
replace: true,
controller: function($scope) {
$scope.dirProp1 = "dirProp1";
$scope.dirFunc = function() {}
},
template: '<div class="wizard">' +
'<div ng-transclude></div>' +
'</div>'
};
});
function MyCtrl($scope) {
$scope.parentCtrlProp1 = 'ParentCtrlProp1';
}

因此,从图中可以看出,被嵌入的范围(因此被嵌入的内容)只能通过原型(prototype)链访问 Controller 范围(003)上定义的属性和函数。

how can I match "ng-scope" to scopes showing in batarang console? like show ng-scope's id.



我不知道有什么方法可以做到这一点(这就是为什么我编写了一个工具来绘制自己的图片)。

关于angularjs:指令创建两个子范围(不是隔离范围)?以及如何获取元素的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18307585/

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