fix20152
@fix20152
javascript developer

Angular — как изменить ng-model через контроллер?

Добрый день.

Есть приложения написано на ангулар, в нем два поля input type="range" и input type="number" нужно чтобы когда нажимаешь на input type="number" изменялось слайдер ( input type="range" ). Решил эту проблему так

<div ng-app ng-controller="Ctrl">
    Range: <input type="range" ng-model="i" min="0" max="5" step=".5" /><br />
           <br />
    Number: <input type="number" ng-model="i" min="0" max="5" /><br />
    <br />
    i: {{i}}
</div>

Пример вот jsfiddle.net/VFyFv
Ну у меня усложнилась задача, я использую canvas библиотеку fabricjs, и мне нужно когда изменяеться размер обьекта изменять слайдер ( input type="range" ) и из-за этого я не могу использовать пример выше, потому что не могу на обьект повесить ng-model="i".

Поэтому вопрос, могу ли я изменять слайдер, не используя ng-model, например, как-то так
function Ctrl($scope) {
    $("input[type=number]").change(function(){
        $scope.i = $("input[type=number]").val();
    })    
}

Но этот код к сожалению не работает.
  • Вопрос задан
  • 3472 просмотра
Решения вопроса 1
madmages
@madmages
Человек прямоходящий
ангуляр такая падла что он не знает ни о каких асинхронных вызовах чего либо если эти вызовы не сделал он сам.
$("input[type=number]").change(function(){
        $scope.i = $("input[type=number]").val();
    })

этот код делает асинхронный вызов jquery. и когда он его делает то ангуляр не знает что скоп был изменен. попробуйте что то вроде этого

<input ng-change="someShitChange()">
$scope.someShitChange = function(){...}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Скажите, зачем вам AngularJS? Или проект достался в наследство?

jsfiddle.net/GxqfK/1

Контроллер связывается с вьюшками через $scope, это по сути уровень абстракции такой. Модели и контроллеры ничего не знают о том как у вас формируется представление, они просто предоставляют данные. А вот директивы интереснее - они могут работать с DOM и инкапсулировать в себе какую-то логику. Например в моем примере, для инпута range берется значение и конвертируется в число (не понятно почему этого нету из коробки... ну да не суть).

Подробнее можете найти в документации. Советую простись мо поему примеру и осознать все что там происходит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы