AngularJS - 从隔离范围指令调用父作用域上的方法而不传递参数

时间:2014-11-07 21:35:55

标签: javascript angularjs controller directive

我只是学习角度并创建一些简单的指令来尝试一些东西。我(我认为)是一个小问题,试图将参数从指令传递到根作用域上的控制器函数。

请看下面的jsfiddle并注意我单击按钮(从指令中)给我未定义,而如果单击控制器本身的按钮似乎工作正常。

jsfiddle

我只是缺少语法明智的东西吗?或者我应该如何工作?我已经多次尝试将变量放在小提琴中的不同位置(注意'xxx'),看看是否有什么可行,我得到错误或什么都没有。

<div ng-app="myApp" ng-controller="myController">

   <!-- root scope -->
   <div style="background-color: teal">
       <button ng-click="propertyF('yyy')" >F</button>
   </div>

   <!-- directive firing methods on the root scope -->
   <div style="background-color: coral">
       <my-directive3 property6="propertyF()"></my-directive3>
   </div>

</div>


var app = angular
.module('myApp', [])
.controller('myController', [
    '$scope', function($scope) {
        $scope.propertyF = function (aValue) {
            alert("propertyF fired: '" + aValue + "'");
        };
    }
])
.directive('myDirective3', function() {
    var directive = {
        link : function link(scope, element, attrs) {
            console.log("link directive 3");
        },
        restrict : 'EA',
        replace : true,
        scope : {
            property6: '&'
        },
        template: '<button ng-click="property6(\'xxx\')">property6</button>'
    };
    return directive;
});

1 个答案:

答案 0 :(得分:0)

使用Angular的工作方式,是传递函数绑定还是指定参数。 propertyF()未指定任何参数。

property6="propertyF(arg)"

然后你可以使用Angular的独特语法来处理这个问题:

ng-click="property6({arg:\'xxx\'})"

http://jsfiddle.net/ue1trkt9/1/