gpt4 book ai didi

scope - angularjs 嵌入范围访问

转载 作者:行者123 更新时间:2023-12-04 10:26:37 27 4
gpt4 key购买 nike

我已经设置了一个带有标题和应用/取消按钮的通用对话框指令。
该对话框有一个孤立的范围。

对话指令的内容是嵌入的,因此它的范围是对话范围的兄弟:

来自 Angular js 文档:

However isolated scope creates a new problem: if a transcluded DOM is a child of the widget isolated scope then it will not be able to bind to anything. For this reason the transcluded scope is a child of the original scope, before the widget created an isolated scope for its local variables. This makes the transcluded and widget isolated scope siblings.



不过,这对我来说是一个新问题。嵌入的 DOM 应该能够在应用时响应对话框。因此,我想在对话框上设置一个“应用”属性并让嵌入的 DOM 观看它。这是不可能的,因为他们是 sibling !

我哪里错了?

最佳答案

我遇到了类似的事情,有两种方法(我知道)可以直接访问嵌入的范围。

第一种是在编译函数中自己创建范围,然后将其与克隆链接函数一起传递给 transclude 链接函数:

function compileFn(tElement, tAttrs, transclude) {
return linkFn;
function linkFn(scope, element, attrs) {
scope = scope.$new();
scope.name = attrs.works1;
transclude(scope, function(clone) {
element.find('div').append(clone);
});
};
}

第二个是创建一个 Controller 并注入(inject)预先绑定(bind)到新范围的 $transclude 服务。您的克隆链接函数将接收新范围作为其第二个参数:
function Controller($element, $attrs, $transclude) {
$transclude(function(clone, scope) {
scope.name = $attrs.works2;
$element.find('div').append(clone);
});
}

在这两种情况下,您都必须提供一个克隆链接函数来自己进行嵌入,而不是使用 ngTransclude。

http://jsfiddle.net/dbinit/wQC7G/6/两者的例子。

关于scope - angularjs 嵌入范围访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415241/

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