考虑一个应用程序,其中可以通过向文本字段提供输入,然后按 Enter 来触发数据库搜索。搜索结果应立即显示。
为了做到这一点,我创建了一个输入元素并给它一个指令属性:
<input search-shipment type="text">
// Directive
Shipment.directive('searchShipment',function(){
return{
restrict: 'A',
link: function(scope,element){
element.bind('keydown',function(e){
if (e.which === 13){
scope.shipment.fetchShipment();
}
})
}
}
});
触发的函数:
Shipment.prototype.fetchShipment = function(){
$http.post('../sys/core/fetchShipment.php',{
// some data to POST
}).success(function(data){
console.log(data);
});
console.log(finished);
};
这导致了一些奇怪的行为。该函数被触发,并且“完成”被记录到控制台。但是,success()
显然被触发到晚了,data
直到我进行另一个必须不同于其他输入的输入才被记录return
现在我发现我可以通过使用表单作为输入元素的包装器来避免这种行为,然后使用 ng-submit 来触发我的函数。
但是,我想知道一些事情:
- 为什么我的第一个基于指令的解决方案不能正常工作?
- 我怎样才能在不使用表格的情况下实现我的目标?
- 即使使用工作表单解决方案,第二个也是在记录数据之前
console.log()
触发的。为什么是这样?