Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript: Angular 2, AngularJS
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
sau
2021 / 1634 / 271
Регистрация: 22.07.2011
Сообщений: 6,205
Завершенные тесты: 1
1

Вызов ng-change через js

20.03.2015, 14:53. Просмотров 1689. Ответов 4
Метки нет (Все метки)

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
    <div ng-controller="MyTestCtrl">
        <input id="test" ng-model="ModelValue" ng-change="ControllerMethod()" />
        <input type="button" onclick="changeInputValue()" value="change me" /> 
        <script type="text/javascript">
            var changeInputValue= function () {
                var test = angular.element("#test");
                test.val("123");
                //Вызов метода в ручную , как то костыльно.
                var scope = test .scope(); 
                scope.ControllerMethod();
            }
        </script>
    </div>
Как правильно сделать , что бы при заполнении значений элементов через скрипт , срабатывал ng-change ?

Добавлено через 7 минут
Т.е , если скажем мы из скриптов за пределами контроллера меняем занчения модели , то там нужно вручную вызывать методы типа $apply() , $digest() и т.п , что бы обновить вьюхи , а тут обратная ситуация , меняем данные вьюхи , и нужно что бы модель обновилась посредством функционала angular , без обращения на прямую к контроллеру.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2015, 14:53
Ответы с готовыми решениями:

Вызов именованной функции внутри .change()
Я не так давно работаю с javascript и не могу разобраться с одной проблемой....

работа с select: это нужно делать через $().val(); или через .change()?
Есть такая форма на сайте. Если значение поля &quot;Тип организации куда нужна...

DataGrid focus change, selection change
Всем привет! Как вызвать некоторую функцию, при изменении фокуса ячеки...

Есть 2 ноута и 2 любых мобильника. Возможно ли соединить компы через мобильники, через голосовой вызов?
Есть 2 ноута и 2 мобильника. На одном ноуте интернет. Нужно через мобильники...

Вызов IE через autorun у CD
Что нужно написать в авторан у СД, что при вставке диска вызывался браузер по...

4
Андрей Антонов
1 / 1 / 2
Регистрация: 06.04.2015
Сообщений: 5
06.04.2015, 23:56 2
Вот работающий пример:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
angular.module('slcode', [])
 
.factory('slcodeModels', function($parse){
    return {
        updateNgModel : function (scope, attrs, value) {
            if (!attrs.ngModel) return;
            var model = $parse(attrs.ngModel);
            model.assign(scope, value); 
        },
        
        readNgModel : function (scope, attrs) {
            if (!attrs.ngModel) return;
            var model = $parse(attrs.ngModel);
            return model(scope);
        }
    }
});
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
angular.module('slcodejQueryUI', ['slcode'])
 
.directive('slcodeAutocomplete', function (slcodeModels) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            var input = $(element);
            var settings = {
                source: scope.$eval(attrs.slcodeAutocomplete) || [],
                change: function(event, ui) {
                    if (ui.item == null) return;
                    slcodeModels.updateNgModel(scope, attrs, ui.item.value);
                    if (attrs.slcodeAutocompleteChange) {
                        scope.$eval(attrs.slcodeAutocompleteChange)(scope, ui.item.value); 
                    }
                    scope.$apply();
                }
            };
            input.autocomplete(settings);
            
            scope.$watch(attrs.slcodeAutocomplete, function(newValue, oldValue) {
                input.autocomplete('option', 'source', newValue || []);
            });
        }
    };
})
HTML5
1
2
3
4
5
6
7
8
<div class="col-sm-9">
                                <input type="text" 
                                    class="form-control" 
                                    id="customer" 
                                    ng-model="quote.Customer"
                                    slcode-autocomplete="ref_customerNamesList"
                                />
                            </div>
Функция updateNgModel здесь - это то, что Вам нужно. Она парсит определение модели в html ng-model="quote.Customer", получает объект "quote.Customer", и присваивает ему переданное значение. Вызываться эта функция может откуда угодно, но в данном случае она вызывается из директивы 'slcodeAutocomplete'.

Данная директива добавляет джикверевский автокомплит к инпуту, но при этом делает так, чтобы изменение выбранного айтема (как Вам и надо - со стороны UI) - обображалось на angular модель.
1
sau
2021 / 1634 / 271
Регистрация: 22.07.2011
Сообщений: 6,205
Завершенные тесты: 1
07.04.2015, 01:18  [ТС] 3
Ох блин ) , костыльный метод покороче будет ) , но спасибо , изучу вариант.
А вообще , в моем случае нужно было просто принудительно вызвать событие onchange через $("test").change(); , далее уже angular подцепит onchange своей директивой ng-change , другой вопрос был как это сделать красиво , без $("test").change(); , судя по коду выше , красота требует жертв ).
0
vrodnenok
16 / 16 / 5
Регистрация: 17.05.2012
Сообщений: 124
08.04.2015, 21:43 4
Javascript
1
2
3
4
5
6
YourApp.controller 'myTestCtrl' ->
  $scope.ControllerMethod = alert "i've been called upon change of #test input" 
// or in strait JS
YourApp.controller('myTestCtrl', function() {
  $scope.ControllerMethod = alert("i've been called upon change of #test input");
});
или я не понял вопроса?
0
vrodnenok
16 / 16 / 5
Регистрация: 17.05.2012
Сообщений: 124
12.04.2015, 10:45 5
и почему я не могу удалить свой собственный пост...
0
12.04.2015, 10:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2015, 10:45

Вызов функции через указатель
Хочу вызвать функцию через указатель который лежит в массиве указателей через...

Вызов функции через класс
Всем привет. Решил разобраться с ООП на практике. Написал небольшой код для...

Вызов процедуры через переменную
здраствуйте, у меня вопрос следующего харрактера: к примеру есть переменная A...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru