2015-05-24 68 views
0

我嘗試通過嵌套指令循環一個函數。從console.infomyCtrl我期望字符串"this should be logged"通過嵌套指令循環功能 - angularjs

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

你在你的代碼的一些錯誤,但我認爲那是因爲你嘗試將其調整到問題(如templateUrlaFunction的屬性,而不是a-function和代替template)。

你可以在你的指令,2路結合(=)(兩者):

scope: { 
    aFunction:"=" 
}, 

而且沒有物體傳遞函數參考:

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

在第二指令HTML有:

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

然後在你的第二個可怕的鏈接函數莫如你可以這樣做:

scope.invokeFunction = function() { 
    scope.aFunction({message: 'this should be logged'}); 
} 

以上的作品,我覺得比更方便&綁定,這是你所看到的,是不是很容易的工作,坦白說我沒有足夠的周圍搞砸它弄清楚如何(如果可能的話)通過它來傳遞參數。

我見過this question,但它直接綁定鏈接功能,並且您希望它與ng-click,所以它可能不適合你。但也許你會在那裏找到你的解決方案。

+0

我有這個想法從這裏:https://egghead.io/lessons/angularjs-isolate-scope-expression-binding 很好,謝謝。它的工作。對不起,對錯。 – Stefan