Is it good to have main controller in Angular?

前端 未结 2 1064
暗喜
暗喜 2021-02-05 08:20

I dont know if this is a good practice... I have a controller defined in route config but because my HomeCtrl is in ng-if statement he cannot listen fo

相关标签:
2条回答
  • 2021-02-05 08:47

    I start all of my Angular projects with:

    <html ng-app="appName" ng-controller="appNameCtrl">

    The use of a "global" controller may not be necessary, but it is always nice to have it around when a need arises. For example, I use it in my CMS to set a binding that initiates the loading of everything else - so all the sub controllers are loaded because of it. That isn't violating separation of concerns because the global controller's concern IS to facilitate the loading of other controllers.

    That said, just be sure to keep things as modular/separated and reusable as possible. If your controllers rely on the global controller's existence in order to function, then there is an issue.

    0 讨论(0)
  • 2021-02-05 09:05

    In my opinion angular js' power comes with separating out clearly the different controllers directives, services, resources etc. Ideally controllers are linked to templates or partials and are used to update the front end and make calls to services or resources. The sooner you start making these separations the sooner you will start making clean and scalable apps that other developers can quickly make sense of. For app structure I would highly recommend you look into either of these two tools:

    Lineman.js

    and

    Yeomann

    The lineman site actually has a really good round up of how the two differ, if you scroll down.

    In your scenario there are many ways to link controllers or make function calls that are in different scopes. You can either create a service that injects to your controllers or you can use $emit and $on to set up notifications in the app eg:

    In controller A

    $rootScope.$on('myNotifier:call', function() {
            myFunction();
        });
    

    And in Controller B or any other controller you could call myFunction() with:

    $scope.$emit('newPatientModal:close');
    
    0 讨论(0)
提交回复
热议问题