2

我似乎无法将我的想法包括在我如何解决这个问题中。我有一个指令,它看起来如下:AngularJS将一个属性值作为参数传递给一个函数,该函数被ng-change所调用

.directive('seqWidget', ['Sequence', function(Sequence){ 
    return {   
     restrict: 'E', 
     scope: { 
      placeholder: '@', 
      option: '@' 
     }, 
     template: '<fieldset><legend data-ng-transclude></legend><input type="text" placeholder = {{placeholder}} autofocus data-ng-model="index" data-ng-change="retrieve({{option}});"/>{{output}}</fieldset>', 
     replace: true, 
     transclude: true, 
     link: function ($scope, $elem, $attr){ 

      $scope.retrieve = function(key){ 
       //var option = $attr.option; 
       console.log(key); 
      } 
     } 
    } 
}]); 

我的HTML是这样的:

<seq-widget placeholder="Index 0-400" option="accurate">Which index number would you like to gain accuracy on?</seq-widget> 

我试图完成基于属性改变我的函数调用的动态方式等几种方式值。我会使用'&'前缀,但我希望此功能在输入发生更改时被触发。有没有一种实际的方式来实现我想要做的事情?或者是否需要使用jQuery来说出类似于$('input')的内容。on('change',function(){});在我的链接功能?

回答

2

您不必通过option它已经在范围内,而您设置了文本绑定option: '@'

所以只是做: -

 $scope.retrieve = function(key){ 
      console.log($scope.option); 
     } 

它也将工作,如果你删除插值,你不必在一个表达式内插范围的变量。

data-ng-change="retrieve(option);" 
+0

即使在我从“retrieve()”中删除“option”作为参数并且在我的console.log($ scope.option)中执行了操作后,我仍然得到了“undefined”的控制台日志$ scope.retrieve函数定义在我的指令的链接函数中,就像你演示的一样。 – papiro 2014-10-19 00:07:55

+0

你可能做错了,检查这个http://plnkr.co/edit/X1LnFy?p=preview – PSL 2014-10-19 00:10:16

+0

,而且,为了访问option属性的值(在这种情况下是“准确的”),我相信你必须使用插值作为准确变得可用作为字符串...就像中的“占位符”的值被插入到模板的新占位符属性中一样。 – papiro 2014-10-19 00:11:40

相关问题