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

标签 javascript angularjs

我创建了一个 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/

相关文章:

javascript - 从复选框列表中获取那些已更改的

javascript - $scope 和 $rootScope 的区别

javascript - Uncaught TypeError : app. all is not a function

javascript - angularjs - 顺序调用执行 ngResource http post 请求的函数

javascript - 无法从 jquery 每个循环中添加样式类或访问元素的属性

javascript - 在 Monaco Editor for javascript 上设置 "this"上下文

javascript - 以发送它们的相同顺序显示 AJAX 响应,*不*使用排队或同步请求?

javascript - 在 javascript 的句子中打乱单词(编码恐怖 - 如何改进?)

javascript - 延迟加载的 ui-jq 流程图

php - 带有 keyBy 的 Laravel 响应返回对象和数组