我希望有一个人可以帮助我。我一直无法弄清楚这一点。
我写了一个指令(见下文),根据我从数据库服务器异步检索的 html 数据在页面上转储预先编写的 ul 列表。指令和服务都有效。
我假设“MenuService.getMenuData().then”中的“then”会强制等待,直到数据到达指令,但是指令如何完成并在数据到达之前显示“3empty”消息,这表明指令较早完成。我知道我可以设置超时延迟,但这并不好。您对可能出现的问题有什么建议吗?我使用的另一种技术是放置一个 ng-show="dataarrived" 并仅在承诺完成时将 dataarrived 设置为 true。但同样的问题。
该指令的目的是从服务中检索 Nav 菜单列表并将其显示在 index.html 上,但无论我将此代码放在控制器还是服务或指令中,我都会得到相同的结果。它什么也没显示。特别是在显示任何其他视图之前在 index.html 中显示它。
如果有意义,这是我的指令。
TBApp.directive('tbnavMenu', function ($compile, MenuService) { var tbTemplate = '3empty';
MenuService.getMenuData().then(function (val) {
tbTemplate = val;
});
var getTemplate = function () {
return tbTemplate;
}
var linker = function (scope, element, attrs) {
element.html(tbTemplate).show();
$compile(element.contents())(scope);
}
return {
restrict: "E",
replace: true,
link: linker,
controller: function ($scope, $element) {
$scope.selectedNavMenu = GlobalService.appData.currentNavMenu;
$scope.menuClicked = function ($event, menuClicked) {
$event.preventDefault();
$scope.selectedNavMenu = menuClicked;
$scope.tbnavMenuHander({ navMenuChanged: menuClicked });
};
$scope.isSelected = function (menuClicked) {
return $scope.selectedNavMenu === menuClicked;
}
},
scope: {
tbnavMenuHander: '&'
}
}
}