这是一个复杂的问题,所以我为听起来复杂的标题道歉。
基本上我有这种情况:
我有一个指令
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 中的值?
谢谢你的帮助!