可以观察自定义指令内的范围吗?

2024-02-21

我正在尝试编写一个指令来创建地图组件,这样我就可以编写如下内容:

<map></map>

现在该指令如下所示:

angular.module('myApp')
  .directive('map', function (GoogleMaps) {
    return {
      restrict: 'E',
      link: function(scope, element, attrs) {
        scope.$watch('selectedCenter', function() {
          renderMap(scope.selectedCenter.location.latitude, scope.selectedCenter.location.longitude, attrs.zoom?parseInt(attrs.zoom):17);
        });

      function renderMap(latitude, longitude, zoom){
          GoogleMaps.setCenter(latitude, longitude);
          GoogleMaps.setZoom(zoom);
          GoogleMaps.render(element[0]);
      }
    }
  };
});

问题是指令中的“watch”在组件的可重用性方面看起来不太好。所以我想最好的事情就是能够做这样的事情:

<map ng-model="selectedCenter.location"></map>

但我不知道在自定义指令中使用角度指令是否是一件好事,也不知道如何获取自定义指令的链接函数中 ng-model 属性中指示的对象。


你需要做类似的事情

angular.module('myApp')
  .directive('map', function (GoogleMaps) {
    return {
      restrict: 'E',
      scope: {
        ngModel: '=' // set up bi-directional binding between a local scope property and the parent scope property 
      },

截至目前,您可以安全地监视您的scope.ngModel,并且每当相关值在指令之外发生更改时,您都会收到通知。

请注意,将范围属性添加到我们的指令中将创建一个新的隔离范围。

您可以参考围绕指令的角度文档here http://docs.angularjs.org/guide/directive特别是“指令定义对象”部分,了解有关范围属性的更多详细信息。

最后你也可以使用这个tutorial http://www.befundoo.com/university/tutorials/angularjs-directives-tutorial/您将在其中找到实现指令的所有材料,并通过从您的应用程序到指令以及相反的双向通信来实现指令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以观察自定义指令内的范围吗? 的相关文章

随机推荐