我试图弄清楚如何将自定义验证器与可以访问父范围的 ngMessages 连接起来。我有一个地址输入字段,onBlur
我想对地址进行地理定位并更新地图上标记的位置(通过在控制器上设置两个变量this
)。
自定义验证器示例使用指令(我已经按照这些指令作为基本示例)但无法从它们移动到地理位置,因为我在ES6、ControllerAs、 ...
- 我已经开始尝试使用 scope.$parent 从链接函数访问父控制器(如何在 AngularJS 中从自定义指令 *with own scope* 中访问父范围?),但我使用的是 ES6 类,它只是似乎没有工作。
- 现在我正在考虑将父函数传递给指令,但该函数抱怨它找不到控制器正常范围的元素,这意味着它无法更新标记的位置。
感谢有关接线的建议。
这是我在第二种情况下到达的地方
var checkAddressDir = function($timeout) {
return {
require : 'ngModel',
scope: {
geolookup: '&'
},
link : function(scope, element, attrs, ngModel) {
function setAsLoading(bool) {
ngModel.$setValidity('recordLoading', !bool);
}
ngModel.$parsers.push(function(value) {
if(!value || value.length == 0) return;
setAsLoading(true);
scope.geolookup()(value)
// scope.$parent.findAddress()
.then( res => {
// I'll use res to update ngModel.$setValidity
console.log(res);
setAsLoading(false);
});
// THE FOLLOWING SERVED TO GET ME STARTED
// $timeout(function() {
// console.log("timeout");
// setAsLoading(false);
// }, 1000);
return value;
})
}
}
}
这是我需要能够与控制器范围一起使用的控制器功能
findAddress(address) {
return this.$q( (resolve, reject) => {
mygeocoder.geocode(myOptions, (res, stat) => {
if (stat === google.maps.GeocoderStatus.OK) {
if (res.length > 1) {
console.log(`Need unique result, but got ${res.length}`);
return "notUnique";
}
var loc = res[0].geometry.location;
this.resto.lat = loc.lat();
this.resto.lng = loc.lng();
this.zoom = 16;
this.$scope.$apply();
return "good";
} else {
console.log(" not found - try again?");
return "notFound";
}
});
});