一尘不染

如何将参数传递给控制器​​中定义但从Angularjs中的指令调用的方法?

angularjs

我尝试将一个参数从指令传递给控制器​​中定义的方法。

我使用隔离范围。

这是Fiddle中的相关代码和Demo

的HTML

 <div ng-controller="MapCtrl">
        <map id="map_canvas" call='callMe()'></map>
    </div>

JS

var module = angular.module('googleMap', []);

module.directive('map', function() {
    return {
        restrict: 'E',
        replace: true,
        scope:{
            callMe : '&call'
        },
        template: '<div></div>',
        link: function(scope, element, attrs) {
            console.log(element);

           /* ... */                
           scope.callMe('hey');

           /* ... */                                
        }
    };
});

function MapCtrl($scope) {

    $scope.callMe = function(val){
    alert(val);
    };

}

我为什么得到val=undefined?它应该是hey

谢谢,


阅读 147

收藏
2020-07-04

共1个答案

一尘不染

您需要注释您的函数参数:

小提琴

视图:

<map id="map_canvas" call='callMe(param)'></map>

指示:

scope.callMe({param: 'hey'});

在文档中对此进行了解释(尽管有些含糊):

&或&attr-
提供一种在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。给定和小部件的作用域定义:{localFn:’&myAttr’},然后隔离作用域属性localFn将指向count
= count +
value表达式的函数包装。通常希望通过表达式将数据从隔离范围传递到父范围,这可以通过将局部变量名称和值的映射传递到表达式包装器fn中来完成。例如,如果表达式为增量(金额),则可以通过将localFn调用为localFn({amount:22})来指定金额值。

2020-07-04