我是javascript/angularjs的新手。 我想在某些元素上执行鼠标悬停时显示bootstrap弹出框。
我为此创建了一个指令。
(function(angular, app) {
app.directive('popOver',["$window","$http",function($window,$http){
return function(scope,elem,attrs){
elem.on('mouseover',function(){
console.log('mouseover');
var data = scope.$apply(attrs.popOver);
console.log('in directive again');
console.log(data);
});
};
}]);
})(angular, app);
指令的值是一个函数
<span class="asdf" pop-over="getVCard(id)">name</span>
函数vcard(id)在我的angularjs控制器中定义。它检查本地存储中是否已经存在数据,如果存在,则返回数据。否则,它会进行$http get请求并将数据存储在本地存储中。
$scope.getVCard = function(id){
var vcardKey = vcardKeyPrefix+id;
var vCardFromLS = localStorageService.get(vCardKey);
if(vCardFromLS){
return localStorageService.get(vCardKey);
}
$http.get(app.common.vcardUrl(id)).
success(function(data){
localStorageService.set(vCardKey,data);
}).
error(function(error){
F1.common.error(data,function(){});
});
return localStorageService.get(vCardKey);
};
由于$http返回的是promise对象,所以我在指令中得到了undefined值。 如何确保函数getVCard
同步返回?
通过谷歌搜索,我阅读了许多结果。 但是建议使用回调函数。 但是我不确定回调函数如何使其同步。 如果有任何帮助,将不胜感激。
更新 1(响应Foo L的评论) 我计划在多个地方使用相同的指令。 Vcard和产品信息等弹出窗口。唯一不同的是传递给弹出窗口指令的参数。 这样指令只需关心显示弹出窗口。 获取数据的位置将在传递给指令的单独函数中。
scope.$watch
,当它成功返回时触发。 - Foo L