Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it bad practice to create Divs just to have multiple controllers?

Is a bad practice to be creating divs in your HTML just to be able to have multiple controllers?

Since you cannot have them in one also the approach of having multiple directives with separate controllers seems like a hack, but correct me if I am wrong.

So I have 2 controllers - one is called ConvertController and the other one is called YouTubeLinkUIController.

The responsibility of the first one is to hit my Web API controller and convert the given YouTube link into an audio.

The responsibility of the second one is to control some of the UI functionality.

In order to follow the single responsibility principle, I have separated them into 2 different controllers and therein lies the problem.

My last commit, specifically Index.cshtml shows the full code, but for the sake of not making this messy I will abreviate it for this post.

https://github.com/AvetisG/TubeToTune/commit/e68ba42f20498c9a4e032328aed6d68c27b9b2cb

<div class="container" ng-app="TubeToTuneApp" ng-controller="YouTubeLinkUIController">

    ... more code

    @*Scoping the Convert Controller*@
    <div ng-controller="ConvertController">

        ... more code

    </div>
</div>
like image 926
AvetisG Avatar asked Feb 02 '26 18:02

AvetisG


2 Answers

Looking at your github commit message it looks like you split the controllers because you didn't want to have too much code in your ui controller.

This is a perfect example of when an angular service is in order. You can think of a service like a controller without all the overhead and that can be easily called from another controller

Angular Service Documentation

What you should do is define a service that calls your api and then

angular.module('youTube', [])

.controller('YouTubeLinkController', ['$scope', 'convert',
  function($scope, convert) {
    $scope.convertLink = function() {
      $scope.convertMessage = convert.convertYoutube()
    };
  }
])

.factory('convert', [
  function() {
    var convertService = {};

    convertService.convertYoutube = function(data) {
      //Make api call
      return "Conversion Done";
    }

    return convertService;
  }
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="youTube">
  <div ng-controller="YouTubeLinkController">
    {{convertMessage}}
    <button ng-click="convertLink()">Convert</button>
  </div>
</body>

Naturally you should define the service in it's own page. That way controllers are only used for interacting with UI. It also solves your problem

like image 118
Elliot Swart Avatar answered Feb 04 '26 10:02

Elliot Swart


It's absolutely fine to use divs\spans and nested structures and use ng-controller with it.

When you add ng-controller to a html element in a way you are creating a component with a model-view and controller.

A complex component can have nested sub components that perform very specific functionality and in a way you are demarcating such parts with ng-controller . To take it a step further if you convert these component into directives, with their own controller + template(view) and that accept model from a data source, then you have a reusable component that you can use throughout the app.

like image 21
Chandermani Avatar answered Feb 04 '26 09:02

Chandermani



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!