我尝试将一个参数从指令传递给控制器中定义的方法。
我使用隔离范围。
这是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
val=undefined
hey
谢谢,
您需要注释您的函数参数:
小提琴
视图:
<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})来指定金额值。