angularjs自定义指令值未发布到控制器

时间:2015-10-07 10:59:06

标签: angularjs angularjs-directive angularjs-scope

我是angularjs的新手, 我正在使用我在这里的自定义指令 Fiddle 该指令在验证后没有将价格值发布给控制器,我只得到名称字段值。

这是我的代码:

<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 ......
};

});

1 个答案:

答案 0 :(得分:2)

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

请注意,这种方法更适用于将自定义parsers注册到NgModelController,因为在指令之外没有直接的API来执行此操作。

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

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

        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。希望这会有所帮助:)