Артем: ну, вообще нет. Правильнее как раз использовать директивы, когда это возможно. А если нет директивы - написать свою и уже там использовать $apply. В идеальном мире у вас вообще не должно быть нигде $apply вызовов вне директив, которые биндят нестандартные события.
Артем: в случае с $apply - нужно обернуть часть кода меняющую $scope в $scope.$apply.
приведите пример минимальный того, что вы имеете ввиду во втором случае.
Дока по директивам вот: https://docs.angularjs.org/guide/directive . Директива - это по сути дом фрагмент, который как правило выполняет какую-то определенную функцию. В твоём случае всё что ты делаешь можно сделать через темплейт в котором просто будет input, а все значения(data-index например) передавать и биндить используя биндинги angularjs. Так же в этом случае можно использовать ng-model, что позволит сделать валидацию при необходимости.
Ну так сделайте из функции randomize функцию, которая вам будет делать обновление data. По массиву data нарисуйте элементы, как в функции doDraw, но при помощи D3.js. Вроде всё.
Владимир Ионов: вы не правы в том, что если в строке есть хоть один "не пробел" - строка после trim() будет непустая. А сколько их там - нам не важно. Прочитайте условие ещё раз.
Илья Пирожок: ну первичное знакомство в любом случае в свободное время. Как правило изучение последующих языков, использующих похожие технологии даётся проще. Я ни в коем случае не призываю отказаться от PHP, это хороший современный язык, на котором можно делать проекты разной сложности и размера. Я лишь советую не останавливаться на первом, что выбрали и попробовать другие вещи, ну и вообще не зацикливаться на чем-то одном, сейчас технологии сменяют друг друга довольно быстро.
смысл в том, чтобы названия ваших переменных содержали некий префикс, по которому вы можете определить, к какой странице относится этот параметр. А префикс может быть абсолютно любым, как вам больше нравится.
Ну у вас это окно получается вообще ни к чему не привязано. Я не знаю насчет удобства пользования, но вообще такое делают довольно редко. Собственно к роутингу такое окошко относится примерно никак, т.к. оно никак особо не связано с основной страницей, на которой пользователь переходит с одного route на другой.
Alessanderrr: это несколько меняет дело. Тогда стоит вызвать $compile после загрузки и инициализации темплейта (скорее всего у вашего расширения есть event подходящий), т.е. нужно получить элемент, который вы хотите скомпилить и вызвать $compile($(element)) (scope).