AngularJS的继承控制器[重复]

Posted

技术标签:

【中文标题】AngularJS的继承控制器[重复]【英文标题】:Inheritance controllers with AngularJS [duplicate] 【发布时间】:2020-06-24 17:04:04 【问题描述】:

我在 AngularJs 中包含 JSP 文件的应用程序的前面部分。

index.jsp 使用指令 ng-view 来显示视图:

index.jsp

<div ng-view autoscroll="true" style="overflow: auto;"></div>

app.js 和 $routeProvider 将控制器链接到视图(home.jsp 包含一些views.jsp):

app.js

$routeProvider
.when('/Error', 
    controller: 'LoginController',
    templateUrl: 'modules/authentication/views/errorConnexion.jsp',
    hideMenus: true
)
.when('/', 
    controller: 'HomeController',
    templateUrl: 'modules/home/views/home.jsp'
)
.otherwise( redirectTo: '/login' );

而我的 HomeController 使用字段来隐藏或显示一些 DOM 元素:

HomeController.js

app.controller('HomeController',
                ['$timeout',
                'service',
                '$scope',
                '$rootScope',
                '$filter',
                '$location',
                '$window',
                'ModalService',
                'ngTableParams',
                '$http',
                '$interval',
                'Excel',
                function($timeout, service, $scope,
                        $rootScope, $filter, $location, $window,
                        ModalService, ngTableParams, $http, $interval, Excel) 

    $scope.Hide_Module = true;
)]);

我的控制器孩子:

ChildController.js

app
.controller('ChildController',
    function()         
        $scope.field = "random";            
    
);

最后是问题,视图:

view.jsp

<section ng-controller="ChildController" class="content"
         ng-hide="Hide_Module">

问题是:如果我删除部分标签上的 ng-controller 指令,一切都会好的。 但是如果我添加它,主视图(index.jsp)显示view.jsp......

所以我想知道我做错了什么以及angularjs如何处理控制器继承以及它们如何通过视图绑定?

【问题讨论】:

ng-view 指令和ng-controller 指令实例化的控制器从父作用域继承作用域属性。 【参考方案1】:

自己找出来,我的项目中有两个错误:

缺少控制器文件的链接

<script src="modules/controllers/sub/childController.js"></script>

(在 index.jsp 中添加)


仅在对象语法中通过 $scope 变量共享数据

在父控制器中定义 $scope.myObject = key: value, ... 而不是原语和数组。 在子控制器中添加 $scope 参数为:

app.controller('ChildController', ['$scope', function($scope)   ]);

【讨论】:

这并不完全正确。子作用域继承原语以及对象。对原语进行分配时应谨慎。对原语的赋值可能会导致数据隐藏问题。

以上是关于AngularJS的继承控制器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

AngularJs开发——控制器间的通信

AngularJS:为啥人们更喜欢工厂在控制器之间共享数据[重复]

了解控制器和模块angularJs [重复]

不同选项卡中控制器之间的Angularjs通信[重复]

另一个控制器中的AngularJS调用方法[重复]

angularjs控制器之间通信,事件通知服务