我的问题是我需要创建一个指令,从控制器范围获取它的元素,或者如果未在范围内定义,则从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.$viewValue
中controller.$modelValue
为undefined
。
非常感谢任何帮助:)
答案 0 :(得分:0)
正在重置它,因为在链接功能中,您将日期变量设置为从开始和结束输入元素获取的值。然后在读取函数中更新视图值,然后更新作为范围变量的模型值。 因此,一旦链接函数调用read,范围变量就会更新为文本框中的内容。
我可以更具体地帮助你如果你能进一步解释你想做什么。
HTH