循环函数通过嵌套指令 - angularjs

时间:2015-05-24 12:40:23

标签: angularjs angularjs-directive

我尝试通过嵌套指令循环一个函数。从console.info myCtrl开始,我希望字符串为"this should be logged"

angular.module('myApp')
      .controller('myCtrl', function ($scope) {
        $scope.aFunction = function(input) {
          console.info(input.message);
        }
      })
      .directive('levelOneDirective', function () {
        return {
          templateUrl: '<level-two-directive aFunction="aFunction(object)"></level-two-directive>',
          restrict: 'EA',
          scope: {
            aFunction:"&"
          },
          link: function (scope, element, attrs) {
          }
        };
      })
      .directive('levelTwoDirective', function () {
        return {
          templateUrl: '<div ng-click="aFunction({message: 'this should be logged'})"></div>',
          restrict: 'EA',
          scope: {
            aFunction:"&"
          },
          link: function (scope, element, attrs) {
          }
        };
      });

在我的index.html我有类似的东西:

<div ng-controller="myCtrl">
  <level-one-directive aFunction="aFunction(object)"></level-one-directive>
</div>

但是控制台说undefined

如何通过嵌套指令连接函数?

1 个答案:

答案 0 :(得分:1)

您的代码中有多处错误,但我认为这是因为您尝试将其调整为问题(例如aFunction作为属性而不是a-functiontemplateUrl而不是{{ 1}})。

您可以在指令中使用双向绑定(template)(两者都有):

=

并传递没有对象的函数引用:

scope: {
     aFunction:"="
},

在第二个指令中,HTML有:

<level-one-directive a-function="aFunction"></level-one-directive>

然后在你的第二个指令的链接功能中你可以做到:

<div ng-click="invokeFunction()"></div>

上面的工作,我发现它比scope.invokeFunction = function () { scope.aFunction({message: 'this should be logged'}); } 绑定更方便,正如你所看到的那样,并不是很容易使用,坦率地说我没有弄清楚它是如何解决的(并且如果可能的话)通过它传递参数。

我见过this question,但它直接绑定在链接功能上,而你希望它带有&,所以它可能不适合你。但也许你会在那里找到你的解决方案。