2015-02-26 90 views
0

我有一個動態構建的小部件列表。每個小部件由html,類,控制器和名稱表示。其中一些可能是空的(例如,並非所有小部件都需要控制器)。 然後我使用Gridster將這些小部件動態加載到<li>AngularJS動態注入控制器,類等

我的基本直覺是ng重複那些<li> s,但Controller不能從scope變量動態加載。 我看到了各種建議in this question 但我不能適合他們到我自己的原因如下代碼:

  1. 我用不主控制器坐在裏面的控制器,這些控制器可以在不同的地方使用
  2. 小部件是根據用戶請求動態創建的。當然,我不讓用戶選擇使用的HTML /類/控制器,這些是預定義的,但他可能會使用一些小部件,而他可能不會。

也許其中一個建議適用於我,我只是不能看到它,所以將欣賞指導。下面是相關代碼:

HTML:

<div class="widgets-background" ng-controller="Investigation2Ctrl" data-ng-init="refetchData();toggleCollapse();initWidgets();"> 
    <div id="widgets" class="gridster"> 
     <ul> 
      <li data-row="1" data-col="1" data-sizex="1" data-sizey="1" class="yellow" name="Updates Widget"> 
       <p style="white-space: pre;">{{gridsterUpdates}}</p> 
      </li> 
      <li ng-repeat="widget in widgetsList" name="widget.name" data-row="1" data-col="2" data-sizex="1" data-sizey="1"> 
       <div ng-class="widget.widgetClass" ng-include="widget.widgetHtmlInclude" ng-controller="widget.widgetController"></div> 
      </li> 
     </ul> 
    </div> 
</div> 

的JavaScript:

function Investigation2Ctrl($scope, $http, $dialog, DialogService, Config, ApplicationContextService, CaseHierarchyService, GeoService, Logger, $timeout) { 

    $scope.widgetsList = []; 
    $scope.initWidgets = function() { 
     $scope.addWidget('Export Widget', 'partials/investigation/widgets/widget-export.html'); 
     $scope.addWidget('Timeline Widget', 'partials/investigation/widgets/widget-timeline.html'); 
     $scope.addWidget('Search Widget', 'partials/investigation/widgets/widget-search.html'); 
     $scope.addWidget('Facets Widget', 'partials/investigation/widgets/widget-facets.html', 'FacetsCtrl'); 
    }; 

    $scope.addWidget = function(widgetName, widgetIncludeHtml, widgetController, widgetClass) { 
     widgetClass = typeof widgetClass !== 'undefined' ? widgetClass : 'widget-container'; 
     $scope.widgetsList.push({ 
      'widgetName': widgetName || '', 
      'widgetIncludeHtml': widgetIncludeHtml || '', 
      'widgetController': widgetController || '', 
      'widgetClass': widgetClass || '' 
     }); 
    }; 
} 

很顯然,我得到的錯誤是widget.widgetController is undefined,自從他嘗試加載,這使得一個名爲widget.widgetController的控制器

T他唯一的想法是動態地創建<li><div ng-include... html中的JavaScript並注入它,但是,它很糟糕。

回答

0

創建一個虛擬的空函數並將其用作控制器。

function dummyCtrl() {} // register as controller if required. 

widgetController: widgetController ||'dummyCtrl' 
+0

你能解釋一下爲什麼這個工作正確,並把它放在我的代碼? 您是否試圖解決不需要控制器的場景?因爲那不是問題,ng-controller ='很好.. – AlexD

+0

可以爲這個創建一個plunker /小提琴嗎? –