【问题标题】:How to pass argument to method defined in controller but called from directive in Angularjs?如何将参数传递给控制器​​中定义但从Angularjs中的指令调用的方法?
【发布时间】:2014-01-28 09:13:50
【问题描述】:

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

我使用隔离范围。

这里是相关代码和Demo in Fiddle:

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

谢谢,

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案1】:

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

    FIDDLE

    查看:

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

    指令:

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

    这是explained in the docs(虽然有点模糊):

    & 或 &attr - 提供一种在上下文中执行表达式的方法 父范围。如果未指定属性名称,则属性名称 假定与本地名称相同。范围的给定和小部件定义:{ localFn:'&myAttr' },则隔离范围属性 localFn 将指向 count = count + value 表达式的函数包装器。经常 最好通过表达式从隔离范围传递数据 对于父范围,这可以通过传递本地地图来完成 变量名称和值放入表达式包装器 fn。例如, 如果表达式是增量(数量),那么我们可以指定数量 通过将 localFn 调用为 localFn({amount: 22}) 来获取值。

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多