2013-07-29 18 views
0

我想時間值分爲2個部件,時間和經絡設置一個選擇的價值,但有他們兩個鏈接到同一個NG-模型值。我的想法是對值進行驗證,從而對值進行相應的格式化和解析。但我似乎無法設置驗證器指令中選擇框的選定選項。如何從格式化的angularjs

我有一個選擇,我用下面的陣列

$scope.timeMeridians = [ {id:'am', value:'AM'}, 
          {id:'pm', value:'PM'}]; 

和指令作是如下

<select ng-model="editingEvent.start_date_time" 
ng-options="option as option.value for option in timeMeridians" 
ub-meridian-validator> 

,至今驗證骨架...填充

angular.module('app.MeridianValidator',[]) 
.directive('ubMeridianValidator',function($timeout){ 
    return { 

     require: 'ngModel', 
     link: function(scope, elem, attrs, ctrl){ 
        var valueType; 
     // sets model based on view 
     ctrl.$parsers.unshift(function(viewValue){ 
        return moment().format('YYYY-MM-DD HH:mm Z'); 
     }); 
        // set the view format 
     ctrl.$formatters.unshift(function(viewValue){  
        return scope.timeMeridians[0]; 
     }); 
    } 
}; 

NB我現在硬編碼選擇邏輯,直到我看到價值變化。

所以現在基本上,無論傳遞給它什麼值,viewValue格式化程序應該返回timeMeridians [0](這是'AM'),但我不會更改視圖中的值...

我已經創建了一個輸入旁邊,它是有線它在重複的動作,所有的變化顯示有蠻好的,由timeMeridians數組中引用的位置設置選擇值的這種方法工作正常從控制器,那爲什麼不在格式化指令中?

請幫助:)

回答

1

因爲我已經意識到這是個錯誤的使用角度JS格式化。達到此目的的正確或更好的方法是使用ng-change指令,它將調用控制器函數來執行更新。如果你一意孤行上保持相對控制器的這種功能,併爲此製作時間輸入可重複使用的,則應封裝這些功能與自己的控制器指令。