Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJs ng视图更改父控制器的值_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJs ng视图更改父控制器的值

Javascript AngularJs ng视图更改父控制器的值,javascript,angularjs,Javascript,Angularjs,您好,我面临一个有关ng view的问题。 这是代码 <header ng-controller="headCtrl" ng-show="landing.ifLandind"> </header> <div ng-view></div> 当ng视图处于加载状态时,有两个控制器—一个“headCtrl”和其他加载。我想更改ng视图中控制器加载的“landing.ifLandind”。如何在第二个控制器中引用它来更改“h

您好,我面临一个有关ng view的问题。 这是代码

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

<div ng-view></div>


当ng视图处于加载状态时,有两个控制器—一个“headCtrl”和其他加载。我想更改ng视图中控制器加载的“landing.ifLandind”。如何在第二个控制器中引用它来更改“headCtrl”中“landing.ifLandind”的值。提前感谢您的帮助

为什么不将服务用于控件标题

您可以将服务注入所有需要操纵标头的控制器中

例如:

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>
angular.module('myModule').factory('serviceHeader',function(){
var modelHeader={
隐藏:假,
隐藏:函数(){
this.hidden=true;
},
show:function(){
this.hidden=false;
},
切换:函数(){
this.hidden=!this.hidden;
}
};
//构成shinyNewServiceInstance的工厂功能体
返回模型头;
});
角度.module('myModule').controller('FooController'['serviceHeader',函数(serviceHeader){
...
serviceHeader.hide();//隐藏标头
...
}]);
角度.module('myModule').controller('HeaderController',['$scope','serviceHeader',函数($scope,serviceHeader){
$scope.headerHelper=服务头;
}]);
或者您可以使用$watch

$rootScope.Scope

希望这有帮助


关于

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

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

您可以尝试使用语法,但如果这两个控制器是同级控制器而不是父子控制器,则可以考虑使用
$parent
$rootScope
或使用自定义服务共享状态谢谢。寻求帮助。他非常乐于助人。
$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.