我是 Angular 的新手,来自 jquery 的思维方式。我已经阅读了大多数主要站点和其他一些站点,并且我正在尝试通过构建可自定义的仪表板应用程序来进一步学习。
我的 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 并将其附加到需要的地方。在角度,我不确定如何选择一个模板并在另一个模板中渲染。这不需要像我上面的第一个粗体问题那样为我详细说明,但是朝着正确方向的一点会很棒!