当前位置: 首页 > 面试题库 >

如何调用AngularJS指令中定义的方法?

东方淇
2023-03-14
问题内容

我有一个指令,这是代码:

.directive('map', function() {
    return {
        restrict: 'E',
        replace: true,
        template: '<div></div>',
        link: function($scope, element, attrs) {

            var center = new google.maps.LatLng(50.1, 14.4); 
            $scope.map_options = {
                zoom: 14,
                center: center,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            // create map
            var map = new google.maps.Map(document.getElementById(attrs.id), $scope.map_options);
            var dirService= new google.maps.DirectionsService();
            var dirRenderer= new google.maps.DirectionsRenderer()

            var showDirections = function(dirResult, dirStatus) {
                if (dirStatus != google.maps.DirectionsStatus.OK) {
                    alert('Directions failed: ' + dirStatus);
                    return;
                  }
                  // Show directions
                dirRenderer.setMap(map);
                //$scope.dirRenderer.setPanel(Demo.dirContainer);
                dirRenderer.setDirections(dirResult);
            };

            // Watch
            var updateMap = function(){
                dirService.route($scope.dirRequest, showDirections); 
            };    
            $scope.$watch('dirRequest.origin', updateMap);

            google.maps.event.addListener(map, 'zoom_changed', function() {
                $scope.map_options.zoom = map.getZoom();
              });

            dirService.route($scope.dirRequest, showDirections);  
        }
    }
})

我想呼吁updateMap()用户采取行动。操作按钮不在指令上。

updateMap()从控制器呼叫的最佳方法是什么?


问题答案:

如果要使用隔离作用域,则可以使用=来自控制器作用域的变量的双向绑定来传递控制对象。您还可以在页面上使用相同的控件对象来控制同一指令的多个实例。

angular.module('directiveControlDemo', [])



.controller('MainCtrl', function($scope) {

  $scope.focusinControl = {};

})



.directive('focusin', function factory() {

  return {

    restrict: 'E',

    replace: true,

    template: '<div>A:{{internalControl}}</div>',

    scope: {

      control: '='

    },

    link: function(scope, element, attrs) {

      scope.internalControl = scope.control || {};

      scope.internalControl.takenTablets = 0;

      scope.internalControl.takeTablet = function() {

        scope.internalControl.takenTablets += 1;

      }

    }

  };

});


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="directiveControlDemo">

  <div ng-controller="MainCtrl">

    <button ng-click="focusinControl.takeTablet()">Call directive function</button>

    <p>

      <b>In controller scope:</b>

      {{focusinControl}}

    </p>

    <p>

      <b>In directive scope:</b>

      <focusin control="focusinControl"></focusin>

    </p>

    <p>

      <b>Without control object:</b>

      <focusin></focusin>

    </p>

  </div>

</div>


 类似资料:
  • 问题内容: 我尝试将一个参数从指令传递给控制器​​中定义的方法。 我使用隔离范围。 这是Fiddle中的相关代码和Demo: 的HTML JS 我为什么得到?它应该是 谢谢, 问题答案: 您需要注释您的函数参数: 小提琴 视图: 指示: 在文档中对此进行了解释(尽管有些含糊): &或&attr- 提供一种在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。给

  • 本文向大家介绍AngularJS使用自定义指令替代ng-repeat的方法,包括了AngularJS使用自定义指令替代ng-repeat的方法的使用技巧和注意事项,需要的朋友参考一下 前言 大家都知道对于处理小数量,ng-repeat是非常有用的,但是如果需要处理非常大的数量集,还是采用自定义的方法更好一些。特别是数据大多都是静态的或已预存储好的,这个时候应避免使用ng-repeat指令。 ng-

  • 问题内容: 我正在尝试根据模型动态生成表单输入和关联的操作菜单。我能够传递要使用的字段和菜单,但无法弄清楚如何配置ng- click来调用模型中定义的适当函数。看到小提琴:http : //jsfiddle.net/ahonaker/nkuDW/ HTML: JS: 任何帮助,将不胜感激。我在指令中尝试了以下ng-click方法 我究竟做错了什么?还是有更好的方法来做到这一点(包含要调用的功能的菜

  • 问题内容: 我有一个用于自定义验证的指令(验证用户名尚不存在)。验证使用$ http服务来询问服务器用户名是否存在,因此返回的是Promise对象。这对于验证非常有用。表单无效,并且包含myform。$ error.usernameVerify,当用户名已被使用时。但是,user.username始终是未定义的,因此它破坏了我的ng- model指令。我认为这可能是因为.success中的函数正在

  • 问题内容: 在上一个问题之后,我现在尝试从指令中调用父控制器上的方法。我得到一个未定义的参数。这是我的工作: 和脚本: 调用updatePerson方法时,person是未定义的。 jsfiddle在这里:http : //jsfiddle.net/graphicsxp/Z5MBf/7/ 问题答案: 只需简单地如下更改您的html 您没有通过updatePerson传递“人”,这就是为什么它不起作

  • 问题内容: 为什么还是没有在下面的代码产生任何影响? 当replace = false时为什么不显示“某些现有内容”? 或者更谦虚地讲,您能否解释指令中的功能以及如何使用它? 例 JS /角度: HTML: 在此处查看Plunker: http://plnkr.co/edit/4ywZGwfsKHLAoGL38vvW?p=preview 问题答案: 拥有后,您将获得以下DOM: 而随着你得到这个: