2015-10-21 3 views
0

Я пытался обновить значение ввода в угловой директиве Проблема: когда я обновляю значение при первом запуске, но когда я обновляю его с тем же значением, что и первое. это добавить значенияОбновление одного значения в угловой директиве

return { 
require: 'ngModel', 
link: function(scope, element, attrs, ctrl) { 

    element.datetimepicker({ 
     weekStart: 1, 
     todayBtn: 1, 
     todayHighlight: 1, 
     startView: 2, 
     forceParse: 0, 
     format: attrs.format ? attrs.format : "yyyy/MM/dd" 
    }).on('changeDate', function(ev) { 
     var dateUTC = new Date(ev.date.getTime() + (ev.date.getTimezoneOffset() * 60000)); 
     var masking = $filter('mapDateTimeFormat')(attrs.format ? attrs.format : "yyyy/MM/dd"); 
     var filterApply = $filter('date')(dateUTC, masking); 
     $parse(attrs.ngModel).assign(scope, filterApply); 
     scope.$apply(); 
    }); 
} 

первый раз, когда я выбрать значение из календаря его как 23-10-15 но если я обновить то же значение снова, она становится чем-то вроде 23-1010-2015 и если я выбираю другую дату, которую он дает мне 23-10-16 значение.

я не могу понять, что делаю не так, как

$parse(attrs.ngModel).assign(scope, filterApply); 

предоставить мне 23-10-15, так что не знаю, как неверное значение получает обновления

Угловая: угловой 1.2.2

Календарь: Bootstrap календарь

всякая помощь будет принята

ответ

0

Вам необходимо переформатировать дату после выбора из пользовательского интерфейса. Когда вы выбираете дату с помощью календаря Bootstrap, формат даты отличается, в то время как нормальная дата() возвращает другую дату. Вы можете просто использовать $ watch на дату и изменить формат даты и снова установить на одну и ту же переменную.

проверьте ниже ссылку для получения дополнительной информации.

https://github.com/angular/angular.js/issues/3615

// скопированный из другого места

Вы не хотели бы, чтобы заменить переменную scope.ngModel, но значение, что стоит за этой переменной. Вы сделали это уже тогда, когда вы читаете значение в первой строке функции связи:

currValue = parseInt(scope.$eval(attrs.ngModel)) 

Если это обычная величина, как MyProperty, вы могли бы использовать, что объем:

scope[attr.ngModel] = newValue 

Но это не сработает, если у вас есть выражение-значение, например container.myProperty. В этом случае (и это более общий тип, вы должны стремиться) вы должны Eval значение быть установлен в объеме, как это:

scope.$eval(attrs.ngModel + "=" + newValue) 

Я должен признать, что $ Eval часть немного уродливая, как в JavaScript с кубком eval, но это делает трюк. Просто имейте в виду, что это может не работать таким образом, когда вы хотите установить значения String. Тогда вам придется избегать этих значений.

Надеюсь, что помогает;)

+0

Я всегда переформатирую значение. var dateUTC = новая дата (ev.date.getTime() + (ev.date.getTimezoneOffset() * 60000)); var masking = $ filter ('mapDateTimeFormat') (attrs.format? Attrs.формат: «yyyy/MM/dd»); var filterApply = $ filter ('date') (dateUTC, маскировка); это требует изменения, а i m меняет формат – Salman

+0

проверяет использование области. $ eval. –

+0

Извините мою ошибку, потратив немного времени на то, что я узнаю, что проблема не связана с директивой Angular. Его с Bootstrap Date Time Picker, поскольку есть проблема с форматом, и когда значение не изменяется, scope.apply не влияет. я исправил это. Спасибо за вашу помощь – Salman