2014-10-04 67 views
0

有时需要从具有隔离范围的指令调用父范围中定义的函数。为了引用在外部范围中定义的功能,通常使用&。但它不允许在函数中发送参数。我可以使它只与=指令数据绑定一起工作。请考虑我的例子plnkr,让我知道是否有可能使用&并将数据放入回调函数中。如何使用父范围中的参数执行函数?

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    function updateNumber(number){ 
    $scope.randomNumber = number; 
    } 
    $scope.randomNumber = 0; 
    $scope.updateNumber = updateNumber; 
}); 

app.directive('randomGenerator', function(){ 
    return { 
    scope:{ 
     onUpdate:'=' 
     ^^^^^^^^^^^^ 
     // I want to use '&', but cannot call onUpdate(something) 
    }, 
    restrict: 'E', 
    replace: true, 
    template: '<button ng-click="update()">Random</button>', 
    link: function(scope,elem,attrs){ 
     scope.update = function(){ 
      var random = Math.random(); 
      scope.onUpdate(random); 
     }; 
    } 
    }; 
}); 

的Html

<body ng-controller="MainCtrl"> 
    <h1>Random numbers generator </h1> 
    <random-generator on-update="updateNumber"></random-generator> 
    {{randomNumber}} 
    </body> 

回答

1

请看这里http://plnkr.co/edit/y0s43VQwpDb6Jyx3HzX9?p=preview

更多信息https://groups.google.com/forum/#!topic/angular/3CHdR_THaNw

HTML:

 <body ng-controller="MainCtrl"> 
     <h1>Random numbers generator </h1> 
     <!-- Add name oF parametr in your directive [NUMBER] --> 
     <random-generator on-update="updateNumber(number)"></random-generator> 
     {{randomNumber}} 
     </body> 

指令:

app.directive('randomGenerator', function() { 
    return { 
    scope: { 
     onUpdate: '&' 
    }, 
    restrict: 'E', 
    replace: true, 
    template: '<button ng-click="update()">Random</button>', 
    link: function(scope, elem, attrs) { 
     scope.update = function() { 
     var random = Math.random(); 

//passing parameter should be named and the name needs to match that on in HTML [NUMBER] 
     scope.onUpdate({ 
      number: random 
     }); 
     }; 
    } 
    }; 
}); 
+0

它的工作原理!谢谢! – Warlock 2014-10-05 06:29:37