我是新來的角,來自jQuery的思維方式。我已經閱讀了大部分主要站點和其他一些站點,我試圖通過構建可定製的儀表板應用程序來進一步學習。AngularJS - 如何從其他控制器運行控制器?
我的HTML:
<div class="library">
<div class="dropdown" ng-controller="LibraryCtrl">
<div id="lib-{{widget.WidgetID}}" ng-repeat="widget in widgets">
<div data-toggle="tooltip" title="{{widget.WidgetDesc}}">
<h2>
{{widget.WidgetName}}</h2>
<div class="libraryWidget {{widget.WidgetReportType}}">
</div>
</div>
</div>
</div>
</div>
<div class="dashboard" ng-controller="DashboardCtrl">
<div>
<article>
<div id="dash-{{widget.WidgetID}}" class="jarviswidget" ng-repeat="widget in widgets">
<header role="heading">
<h2>
{{widget.WidgetName}}</h2>
</header>
<div role="content" class="content">
<div class="inner-spacer">
<div class="table">
</div>
</div>
</div>
</div>
</article>
</div>
</div>
從本質上講,我建設可用的小部件「庫」一種觀點認爲,對於當前拾取他們的「儀表盤」的小部件另一種觀點。 HTML在這裏仍然非常簡單。庫視圖呈現得很好,但儀表板視圖沒有。
中的JavaScript:
function LibraryCtrl($scope, $http, sharedModels) {
$http({
method: 'POST',
url: '../Services/GetUserWidgetDetails',
headers: {
'Content-type': 'application/json'
}
}).success(function (data) {
sharedModels.setProperty(data);
$scope.widgets = data;
console.log(data); // logs 2nd with expected data
});
}
function DashboardCtrl($scope, sharedModels) {
var libraryWidgets = sharedModels.getProperty();
$scope.widgets = libraryWidgets;
console.log(libraryWidgets); // logs 1st with empty object
}
angular.module('dashboard', [])
.service('sharedModels', function() {
var libraryModel = {};
return {
getProperty: function() {
return libraryModel;
},
setProperty: function (data) {
libraryModel = data;
}
};
});
我的兩個控制器應該使用相同的模式,所以在其他SO職位的建議我已經創建的服務來獲取和設置這種共享模式。問題是,我的DashboardCtrl試圖在LibraryCtrl成功之前呈現它的視圖。 解決這個問題的方法是什麼:使DashboardCtrl等待LibraryCtrl的成功?
如果我的div.dashboard視圖中的div.content元素轉到許多可能的子模板之一(取決於LibraryCtrl的成功JSON),那麼(並且這可能值得成爲它自己的問題/帖子)我該如何去做這件事?在jQuery模板中,我將爲每個模板都設置id,jquery將呈現HTML並在需要時添加它。在角度上,我不確定如何選擇模板並在另一個模板內渲染。對我來說這不需要拼寫出來,就像我上面第一個粗體問題一樣,但是正確的方向將會很棒!