Angular.js指令元素的默认值

时间:2014-03-15 14:51:07

标签: javascript angularjs

我的问题是我需要创建一个指令,从控制器范围获取它的元素,或者如果未在范围内定义,则从DOM元素中获取它。
这是我的指示:

rmsUtils.directive('rmsDateRange', ['$parse', function($parse) {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, element, attrs, controller) {
            var date = {
                'start' : element.find('[rms-date-range-field=start]').val(),
                'end' : element.find('[rms-date-range-field=end]').val(),
            };
            element.datepicker({
                format: "yyyy",
                startView: 1,
                minViewMode: 2,
                autoclose: true
            }).on('changeDate', function(e){
                var year = e.date.getFullYear(),
                id = e.target.getAttribute('rms-date-range-field');
                date[id] = String(year);
                scope.$apply(read);
            });

            function read() {
                controller.$setViewValue(date);
            }

            read();
        }
    };
}]);

元素看起来像:

<div class="input-group input-daterange input-group-sm" rms-date-range id="id_birth_date_range" name="birth_date_range" ng-model="filters.birth_date_range" ng-show="showCustomBirthYears()">
    <input class="form-control input-xs" type="text" rms-date-range-field="start" value="1980">
    <span class="input-group-addon">to</span>
    <input class="form-control input-xs" type="text" rms-date-range-field="end" value="1995">
</div>

控制器让我们说一个定义$scope.filters.birth_date_range = {start: 2000, end: 2010}的简单ctrl。

正确分配了值,但是当我的指令初始化时,它将它们重新分配到1980,1995。在调用link()函数read()之前,在我的指令的controller.$viewValuecontroller.$modelValueundefined

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

正在重置它,因为在链接功能中,您将日期变量设置为从开始和结束输入元素获取的值。然后在读取函数中更新视图值,然后更新作为范围变量的模型值。 因此,一旦链接函数调用read,范围变量就会更新为文本框中的内容。

我可以更具体地帮助你如果你能进一步解释你想做什么。

HTH