如何在angularjs中设置格式化程序的select值



我试图将时间值拆分为两个分量,时间和子午线,但将它们都链接到同一个ng模型值。我的想法是为这些值设置验证器,这些验证器将相应地格式化和解析这些值。但我似乎无法设置验证器指令中选择框的选定选项。

我有一个选择,我已经填充了以下阵列

$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];
        });
    }
};

注意:我现在已经对选择逻辑进行了硬编码,直到我看到值发生变化。

因此,基本上目前,无论传递给它什么值,viewValue格式化程序都应该返回timeMeridians[0](即"AM"),但我不会更改视图中的值。。。

我在它旁边创建了一个输入,并将其连接起来以复制操作,所有更改都显示在那里,而且这种通过引用timeMeridians数组中的位置来设置选择值的方法在控制器中运行良好,所以为什么不在formatter指令中呢?

请帮助:)

我后来意识到这是对Angular JS格式化程序的错误使用。实现这一点的正确或更好的方法是使用ng更改指令,该指令将调用控制器函数来执行更新。如果你一心想保留相对控制器的这个功能,从而使时间输入可重复使用,那么你应该用它自己的控制器将这个功能封装到一个指令中。

最新更新