Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как вызвать метод? (https://javascript.ru/forum/misc/50168-kak-vyzvat-metod.html)

Aetae 16.09.2014 15:19

Angular - это не js, это мерзость со своей говнопарадигмой.

tsigel 16.09.2014 15:24

ibolgenos,
Да, там надо ковыряться. Тем более что у вас там не просто angular, а angular с requirejs, и там могут быть применены нестандартные решения (хотя скрещивание ангулара с чем-либо уже нестандартное решение)

ibolgenos 17.09.2014 14:54

Я взял код примера («Add Some Control» angularjs.org/#add-some-control) с сайта AngularJS. Я хочу вызвать метод addTodo() используя консоль Chrome, но не знаю как. Если ввести консоль addTodo() или scope$.addTodo(), то получу сообщение «ReferenceError: addTodo is not defined». Поскольку я не программирую на JS и уж тем более не знаком с AngularJS, не могли бы вы сказать, что нужно ввести в консоль?

Вообще возможно ли вызвать метод в AngularJS со стороны? Или все методы вызвываються только внутри самого AngularJS?


tsigel 17.09.2014 15:02

Ничего) Ангулар не делает глобальных объектов (точнее делает, но добраться через них ОЧЕНЬ сложно). Он, как и любой фреймворк, рассчитан на управление его объектами через его апи. Из консоли вы этого не сделаете без костылей.

ibolgenos 17.09.2014 15:27

А вы можете добраться до функции addTodo() или сделать так, чтобы она стала доступна? Это вроде маленький пример с сайта AngularJS.

ibolgenos 17.09.2014 15:46

Вот тут сказали как вызвать функцию из примера - https://groups.google.com/forum/#!to...ar/6yoDLdYVRjc

Теперь осталось разобраться в своем...)

tsigel 17.09.2014 15:47

ibolgenos,
Вы не понимаете. Так делать НЕ НАДО. Разбирайтесь с фреймворком и делайте правильно. Если это вам понадобилось - значит что-то у вас не правильно сделано.

Самый простой способ сделать то что вы хотите - в контроллере после
.controller('TodoController', ['$scope', function($scope) {

написать
window.$scope = $scope;

тогда вызов addTodo():
$scope.addTodo();


Но это костыльный вызов. И после каждого такого вызова вы можете ловить неожиданные глюки, часть из которых может исправить вызов
$scope.$apply();

После каждого такого костыля.

Лучше изучить фреймворк чем наполнять его костылями.

ibolgenos 18.09.2014 09:54

Цитата:

Сообщение от tsigel (Сообщение 331013)
ibolgenos, Вы не понимаете. Так делать НЕ НАДО. Разбирайтесь с фреймворком и делайте правильно. Если это вам понадобилось - значит что-то у вас не правильно сделано.

Попробую поставить свою задачу по другому. У меня есть приложение на Java (использующее фреймворк Vaadin) и есть страница на JS (использующее фреймворк AngularJS). Я хочу чтобы мое приложение взаимодействовало с этой страницей.

Например, страницей будет являться главная страница AngularJS, на которой находиться пример, в котором при нажатии на кнопку появляется новый чекбокс. Так вот, я хочу чтобы чекбокс добавлялся и при нажатии на кнопку моего приложения. Как это сделать? Есть другие решения?

tsigel 18.09.2014 13:13

Эмулируйте действия пользователем (например как с кликом) или взаимодействуйте стейтами (через урл).

ibolgenos 18.09.2014 15:07

Разве эмулирование будет лучше? Особенно когда мне нужно не только кликнуть, но и заполнить некоторые поля.

Можете рассказать подробнее про "стейты", что за зверь? И если можно то попробуйте с помощью "стейта" кликнуть по кнопке, которая на официальном сайте AngularJS :)


Часовой пояс GMT +3, время: 08:22.