0

这是一个复杂的问题,所以我为听起来复杂的标题道歉。

基本上我有这种情况:

我有一个指令

scope: false,
transclude: true

(我将称之为 Directive1) Directive1 的模板引用了第二个指令(Directive2),它具有一个隔离的范围,我将一个使用“=”双向绑定的变量传递到该范围内。例如

pageTitle: '='

我从 Directive1 绑定的变量在 Directive1 的 $scope 上。

page-title="pageTitle"

好的,现在,我有一个控制器(我们将调用 Controller1),它嵌入在 Directive1 的嵌入内容中,需要更改 pageTitle 的值。由于 Directive1 具有共享范围,我可以轻松地从 Controller1 中读取 $scope.pageTitle 的值,但是,当我尝试更改该值时,它不会通过 Directive2 的双向绑定向下传播。这似乎应该是可能的,但我不知道如何。

但是,如果我像这样在 Directive1 中创建一个新函数:

$scope.changePageTitle(newTitle){
    $scope.pageTitle = newTitle;
}

并从 Directive2 中调用该函数:

$scope.changePageTitle('Whatever I Want');

确实成功地更改了 Directive1 和 Directive2 中变量的值。

这是一个带有问题示例的jsfiddle。

https://jsfiddle.net/aou5za7z/3/

请注意,如果您在第一个输入框中键入一个值,它只会影响 Controller1 的值,但是您可以通过在第二个输入中键入一个值并点击“更改标题”来更改 Directive1 和 Directive2 中的值

我是否需要使用该方法解决方法,或者是否应该有一种方法可以通过共享范围 Directive1 和 Controller1 都共享从 Controller1 中更改 Directive2 中的值?

谢谢你的帮助!

4

1 回答 1

0

是的,发生这种情况是因为你不能拥有一个带有嵌入指令的共享范围,而是你得到一个继承的范围。

于 2017-06-26T20:27:06.240 回答