2013-08-22 10 views
8

私はdob列を持っていますが、これはyyyy-mm-dd形式であり、2013-01-01と入力されています。 Jan.私は関数を記述し、その関数から正確な値を返すことでこれを達成できます。 しかし、ng-modelを使用して入力ボックスから関数を呼び出すことはできませんでした。ここでは、ng-bindを使用してスパンで呼び出すことができます。私は入力ボックス内の関数呼び出しが双方向バインディングを壊すことを理解できます。しかし、私はこれにどのようなアプローチをとることができますか?達成方法ng-model(plnkrで)との機能的結合

http://plnkr.co/edit/pZDpypsxM1OA2JwFhjjp?p=preview

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script> 
<script type="text/javascript" > 
    var app = angular.module('app', []); 
    app.controller('AppCtrl', function ($scope) { 
     $scope.dob = "2013-01-01"; 
     $scope.getDateOfBirth = function(dob){ 
      var months = ["Jan","Feb","Mar","Apr","May","June","July","Aug","Sep","Oct","Nov","Dec"] 
      var split = dob.split("-"); 
      return parseInt(split[2])+" "+months[parseInt(split[2])-1]; 
     } 
    }); 
</script> 

<span ng-app="app" ng-controller="AppCtrl" ng-bind="getDateOfBirth(dob)"></span> 

<input type="text" ng-model="getDateOfBirth(dob)"/> 
+0

[$ formatters and $ parsers](https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#$parsers)にチェックを入れてください。もしあなたが望むなら、私はそれらを使って答えを書くことができました – aarosil

答えて

6

あなたは関数によって返された値を割り当てるには、NG-INITを使用して、モデルに割り当てることができます。

<input ng-init="myDOB = getDateOfBirth(dob);" type="text" ng-model="myDOB"> 

DEMO

+2

ありがとう。しかし、そのようにして、それは双方向バインディングに参加しません。私がdobで何らかの変更を行うと、入力ボックスに反映されません。 –

+0

http://plnkr.co/edit/qntKlT7mAysnSRGWJ7ot?p=preview –

+0

上記のplnkr 、2番目の入力ボックスで変更を行うと、spanに反映されますが、最初の入力ボックスに反映されません –

0

更新された値を維持する場合は、値とngの変更を設定するには、NG-INITを使用することができます。これが誰かを助けることを願って!

関連する問題