gpt4 book ai didi

javascript - 在 AngularJS 指令中正确实现对象属性的绑定(bind)

转载 作者:行者123 更新时间:2023-11-29 22:19:15 25 4
gpt4 key购买 nike

我创建了一个 AngularJS 指令来为 Google map 自动完成包装一个 Geocomplete 插件。我试图让它绑定(bind)到范围的属性,这是通过向现有元素添加“geocomplete”属性来指定的。

    geocompleteModule.directive("geocomplete", function ($log, $timeout, $compile, $controller) {
return {
restrict: 'A',
priority: 200,
link: function (scope, element, attrs, ctrl) {
var autocomplete = $(element).geocomplete().bind("geocode:result", function (event, result) {
if(result.geometry && result.geometry.location) {
var location = result.geometry.location;
scope.$apply(function (s) {
s[attrs.geocomplete] = new Models.Point(location.lat(), location.lng());
});
}
});
}
};
});

但是,如果 geocomplete 属性中引用的属性是子属性,则这将不起作用。例如:

<input geocomplete="location" />

有效。

<input geocomplete="search.location" />

不会工作。

AngularJS 似乎能够使用自己的绑定(bind)来实现这一点,但我该如何自己实现呢?

编辑

我知道如何使用 split 和 for 循环来完成此操作,但大概这不是“正确”的方法。

最佳答案

我可以看到您的指令只有两个变化。添加范围,将 geocomplete 属性上的任何值绑定(bind)到“位置”,然后在您的范围内使用 s[scope.location]。$apply

指令文档:http://docs.angularjs.org/guide/directive

geocompleteModule.directive("geocomplete", function ($log, $timeout, $compile, $controller) {
return {
restrict: 'A',
scope:{
location:'=geocomplete'
},
priority: 200,
link: function (scope, element, attrs) {
var autocomplete = $(element).geocomplete().bind("geocode:result", function (event, result) {
if(result.geometry && result.geometry.location) {
var location = result.geometry.location;
$timeout(function() {
scope.location = new Models.Point(location.lat(), location.lng());
});
}
});
}
};
});

关于javascript - 在 AngularJS 指令中正确实现对象属性的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13346862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com