参数传输在Angularjs指令中不起作用

时间:2017-06-30 10:21:07

标签: javascript angularjs frontend

该页面包含Angular-md-datepicker的日历,其中包含以下参数:

<md-datepicker
   tzoned-date
   ng-model="objt.datesince"
   timezone="objt.timezone"
   ng-required>
</md-datepicker>

指令代码:

.directive('tzonedDate', function () {
return {
    require: 'ngModel',
    restrict: 'A',
    link: function (scope, elem, attrs, ngModel) {
        var toView = function (val) {
            var momentd = moment.utc(val).utcOffset(attrs.timezone);
            return new Date(momentd.format('YYYY-MM-DD'));
        };

        var toModel = function (val) {
            return moment(val);
        };

        ngModel.$formatters.unshift(toView);
        ngModel.$parsers.unshift(toModel);
    }
};
})

实际上问题是指令中的time参数是正常传递的,但是时区参数总是为空(我尝试写 timezone =&#34; {{objt.timezone}}&#34 ; )结果是一样的。

1 个答案:

答案 0 :(得分:1)

使用$scope.$eval

.directive('tzonedDate', function () {    
    return {
        require: 'ngModel',
        restrict: 'A',
        link: function (scope, elem, attrs, ngModel) {        

            ngModel.$formatters.unshift(toView);
            ngModel.$parsers.unshift(toModel);

            function toView(val) {
                //var momentd = moment.utc(val).utcOffset(attrs.timezone);
                //Use scope.$eval
                var timezone = scope.$eval(attrs.timezone);
                var momentd = moment.utc(val).utcOffset(timezone);
                return new Date(momentd.format('YYYY-MM-DD'));
            }

            function toModel(val) {
                return moment(val);
            }
        }
    };    
})

使用$eval在指令范围的上下文中将时区属性评估为角度表达式。