您好我面临一个受到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;。在此先感谢您的帮助
答案 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.