#javascript #html #angularjs
#JavaScript #HTML #angularjs
Вопрос:
Я пытаюсь запустить событие ng-change программно из некоторого javascript.
Это элемент, для которого я пытаюсь запустить событие ng-change
<select ng-model="user.siteId" name="siteSelect" ng-change="user.setSelectedSite(user.siteId)" class="ng-pristine ng-untouched ng-valid ng-empty">
<option value="" selected="selected">Please Select A Site</option>
<option id="siteOpts" value="1" ng-repeat="site in user.sites | orderBy:'siteName'" class="ng-binding ng-scope">Site1</option>
<option id="siteOpts" value="2" ng-repeat="site in user.sites | orderBy:'siteName'" class="ng-binding ng-scope">Site2</option>#
<option id="siteOpts" value="3" ng-repeat="site in user.sites | orderBy:'siteName'" class="ng-binding ng-scope">Site3</option>
</select>
Я знаю, что могу выбрать значение, используя этот код
document.querySelector('.ng-pristine.ng-untouched.ng-valid.ng-empty').value = 2;
Однако это не приводит к запуску события ng-change.
Как я могу выбрать значение и обеспечить запуск события ng-change?
Комментарии:
1. отслеживается значение модели,
user.siteId = 2
вместо этого устанавливается2. @svarog как мне установить значение модели из JS? user.SiteID = 2; не работает, потому что пользователь не определен.
3. вы делаете это в контроллере, определяете и объект
user
и добавляете свойствоsiteId
со значением 2, например$scope.user = {}; $scope.user.siteID = 2;
Ответ №1:
Согласно документации
Выражение ngChange вычисляется только тогда, когда изменение входного значения приводит к тому, что новое значение фиксируется в модели.
Оно не будет оценено:
- если значение, возвращенное из конвейера преобразования $parsers, не изменилось
- если входные данные продолжали оставаться недействительными, поскольку модель останется нулевой
- если модель изменяется программно, а не путем изменения входного значения
Обратите внимание, эта директива требует присутствия ngModel.
Что вы можете сделать, так это вручную вызвать вашу функцию из вашего контроллера
user.setSelectedSite(user.siteId)
или используйте $scope. $watch .
Комментарии:
1. спасибо за помощь, у меня это работает следующим образом:
angular.element(document.getElementsByTagName('BODY')[0]).scope().user.setSelectedSite(2)
2. @user2976138 Я рад, что смог помочь.
3. .scope() доступен только в режиме отладки