父视图不反映子控制器的更改

4

我是一个 Angular 的初学者,如果这是一个新手问题,那么请见谅。基本上,我有一个控制器,它试图改变父级作用域的值。虽然成功了,但父级视图从未更新。

我的父级视图如下:

<html ng-app="app" ng-controller="appController">
  <head>
      ...
  </head>
  <body>
    This is the outer view.<br>
    <br>
    {{ welcome }}
    <div ng-view style="width: 100%; border: 1px solid black; padding: 10px;">

    </div>
  </body>
</html>

我正在尝试让子控制器更改此处所见的welcome的值。

app
.controller('homeController', function ($scope) {
  $scope.welcome = "Hello world!"
  $scope.$parent.welcome = "It works!!!!!!!!!";
  console.log("Home controller loaded.");
})
.controller('appController', function ($scope) {
  $scope.welcome = "It doesn't work!"
  console.log("App controller loaded.");
});

代码执行了,但我没有像预期的那样看到消息“它工作了!!!!”。这是一个演示我的问题的Plunker:http://plnkr.co/edit/Dywofrx0u3QOaiKe9MsJ?p=preview


你有了解过Angular中的广播和发射事件吗? - Robin
即使我对AngularJS还不熟悉,但是阅读一下这些事件将会帮助你解决问题。 - Robin
1个回答

5

要使父级作用域的更改生效,您需要将数据嵌套在一个 对象 中。

例如,如果您的主页控制器有以下内容:

 $scope.someObject = {};
 $scope.someObject.welcome = "Hello from the appController!"

然后是你的子控制器:

$scope.$parent.someObject.welcome = "Hello from the homeController!";

这将正常工作。

这是更新后的Plunker:http://plnkr.co/edit/idWEgd8QRwts3zyR6vXJ?p=preview

非常相关:更新父级范围变量


我个人更喜欢使用一种方法,就像这里:https://dev59.com/8WQn5IYBdhLWcg3wTlsS#20350686 - ngDeveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接