2015-10-07 64 views
-1

我在angularjs是新, 我使用,我已经来到这里 Fiddle 这个指令不张贴价格值验证后的控制器,我得到的唯一名字自定义指令字段值。angularjs定制指令值不张贴到控制器

这是我的代码:

<div class="form-group"> 
<label for="exampleInputEmail1">Item Price</label>     
<div class="input-group"> 
<span class="input-group-addon">$</span> 
<input id="phone" class="form-control" ng-model="item.price" currency-input> 
</div> 
</div> 

这里是控制器代码:

angular.module('ngApp') 
.controller('ItemCtrl',function($scope){ 

$scope.item = {}; 

$scope.addItem = function(){  
    console.log($scope.item); 
} 
}) 
.directive('currencyInput', function(){ 
return ...... 
}; 

});

+0

尝试通过使用(并在这里发布)一个最小的例子来缩小这一点。 – Marged

回答

2

我看到您正在使用link函数来注册您的自定义分析器。

请注意,这种方法更适合于将我们自定义的parsers注册到NgModelController,因为没有直接的API可以从指令外部执行此操作。

我建议进行以下更改以使其正常工作。

  1. angular.module('minovateApp',[]) - 您需要传递一个空数组,指示该模块没有依赖关系。
  2. 您无法捕捉模型中的值的原因是因为您是自定义解析器中的not returning the parsed value,因此请修改您的link函数,如下所示。

里面你货币输入指令,

link: function(scope, element, attrs, ctrl) { 
     /* removed the return as it's not required */ 
     ctrl.$parsers.push(function(inputValue) { 
      var inputVal = element.val(); 

      /* removing your logic for brevity */ 
      var res = intPart + decPart; 

      if (res != inputValue) { 
       ctrl.$setViewValue(res); 
       ctrl.$commitViewValue(); 
       ctrl.$render(); 
      } 

      /* return the final value once you're done parsing */ 
      return res; 
    }); 

下面是一个示例Pen与上述变化。希望这会有所帮助:)

+0

完美,这是工作,我只是把'返回资源:' 谢谢@Arkantos –

+1

很高兴我可以帮助:) – Arkantos