如何使用$ scope。$适用于父范围?

时间:2015-09-04 13:05:57

标签: angularjs

在Angular 1.2中,我有一个子指令和一个父指令(带有隔离范围)来制作一个通用弹出窗口,它接受参数中的指令并包含它。

在我的child指令中,我必须更新父指令的标题,该值在我的控制台中更新,但在我的UI中没有更新。

行为:

1 - 我将我的指令声明的属性设置为:`

2 - 点击按钮打开我的音频设备自定义框 - >标题等于A

3 - 我的audio-popup指令中有3个标签,所以我点击第3个标签,然后我尝试更改自定义框的标题 - > FAIL

我尝试了不同的解决方案,但我找不到,我确切地说在这种情况下我不能使用rootScope。

//childDirective
$scope.setTabTo = function (to) {
    $scope.tab = to;
    if ($scope.tab == "already") {
       $scope.$parent.continueClose = false; //in console = false
       $scope.$apply(function () { $scope.$parent.title = "New Title" });
    }
    //...
};

我读过这个:How to access parent scope from within a custom directive *with own scope* in AngularJS? 但是如果我尝试使用$ scope我会有错误。$ parent。$直接申请,错过了应用范围的东西...... 这篇文章Directive updates parent scope value对我不起作用。

我已经尝试在我的父指令中查看标题值,但不能用于...

2 个答案:

答案 0 :(得分:1)

您使用的$ parent不是您认为的父级。请记住,音频弹出窗口可能具有隔离范围,这将在链中添加另一个子节点。还有一些指令可以创建新的子范围:ng-controller,ng-switch,ng-if,ng-repeat等。

我也不明白为什么你需要范围。$适用于这种情况。只有在从角度世界之外修改范围时才需要调用$ apply(例如element.on(' click')而不是ng-click)。

您提供的代码非常少,可以为您提供更准确的答案。

答案 1 :(得分:0)

  

如果child指令没有孤立的范围,那么你应该这样做   $ scope.Model.title =“新标题”。你不需要申请。 (Model.title   因为.title不会工作 - 你不能改变父范围根   对象,只有嵌套的对象) - Petr Averyanov

是的,我只是使用$ scope.title而不是$ scope。$ parent.title

事实上,我的自定义框有一个隔离范围,但没有我的audio-popup指令,所以我可以直接访问我的自定义框范围!