I'm implementing on-the-fly dashboards in AngularJS

Can I implement something like:

    $scope.showDashboard = function () {
        $scope.dashboardPath = "/Widgets/Weather/View.htm";
        $scope.widgetController = 30;

        require(['/Widgets/Weather/Controller.js'], function (w) {               
            whatShouldIputHere = w;
        });


    };


 <div ng-include src="dashboardPath" ng-controller="whatShouldIputHere?"></div>

Is it possible to assign a controller to ng-include dynamically?

There could be many widgets on the dashboard

There is a project in development that implements dashboard functionality with AngularJS.

Features:

  • Adding/removing widgets
  • Widgets drag and drop
  • Any directive can be a widget

Running Demo http://nickholub.github.io/angular-dashboard-app

Demo source code https://github.com/nickholub/angular-dashboard-app

Dashboard directive itself https://github.com/nickholub/angular-ui-dashboard

We created an angularjs based dashboard in the open source hawtio project. You can noodle the code here if you like:

https://github.com/hawtio/hawtio/tree/master/hawtio-web/src/main/webapp/app/dashboard

For each widget on the dashboard we compile the partial directly with a child scope https://github.com/hawtio/hawtio/blob/master/hawtio-web/src/main/webapp/app/dashboard/js/dashboard.ts#L142

Though we had to patch angularjs to allow us to use custom injection on child scopes. e.g. so that we can use a different implementation of $location for each child widget (so it thinks its on its own real URL etc). Hopefully when custom injectors are supported we can move to that.

Instead of using dynamic controllers why not use a single controller(the one which has the showDashboard method). Adding dynamic controller with ng-include will result in nested controllers which is illegal i guess. And instead of using ng-include as an attribute use it as an element.

<ng-include src="dashboardPath"></ng-include>