AngularJs ng-view更改父控制器的值

时间:2016-01-30 10:31:59

标签: javascript angularjs

您好我面临一个受到ng-view尊重的问题。 这是代码。

<header ng-controller="headCtrl" ng-show="landing.ifLandind">            
</header>

<div ng-view></div>

有两个控制器一个&#34; headCtrl&#34;和ng-view加载时的其他负载。我想改变&#34; landing.ifLandind&#34;来自控制器加载在ng-view中。如何在第二个控制器中引用它将改变&#34; landing.ifLandind&#34;的值。在&#34; headCtrl&#34;。在此先感谢您的帮助

2 个答案:

答案 0 :(得分:2)

为什么你没有使用服务来控制标题?

https://docs.angularjs.org/guide/services

您可以在需要操作标题的所有控制器中注入服务。

例如:

angular.module('myModule').factory('serviceHeader', function() {
 var modelHeader = {
    hidden: false,
    hide: function() {
      this.hidden = true;
    },
    show: function() {
      this.hidden = false;
    },
    toggle: function() {
      this.hidden = !this.hidden;
    }
 };
 // factory function body that constructs shinyNewServiceInstance
 return modelHeader;
});


angular.module('myModule').controller('FooController' ['serviceHeader', function(serviceHeader) {
  ...
  serviceHeader.hide(); //hide header
  ...
}]);


angular.module('myModule').controller('HeaderController', ['$scope', 'serviceHeader', function($scope, serviceHeader) {
  $scope.headerHelper = serviceHeader;
}]);



<header ng-controller="HeaderController" ng-show="!headerHelper.hidden">            
</header>

<div ng-view></div>

或者您可以使用$ watch

https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope

希望这会有所帮助。

问候

答案 1 :(得分:0)

您可以将$ rootScope注入控制器(headCtrl和ng-view的控制器)。然后在ng-veiw的控制器中添加

$rootScope.$emit('controllerLoaded', <value>) //<value> is some value you wish to send

在headCtrl中添加

$rootScope.$on('controllerLoaded', function(value) {  
    $scope.landing.ifLandind = ... //add whatever change you want to make
})

So whenever a controller loads event "controllerLoaded" gets emitted and received in headCtrl.