2013-09-17 4 views
1

Я пытаюсь улучшить этот JsFiddle код, добавляя угловые маршруты, контроллеры, услуги и т.д. http://jsfiddle.net/ProLoser/bp3Qu/light/AngularJS сфера выпуск

Проблема я столкнулся это со следующими строками кода

function FormBuilderCtrl(){ 
var scope = this; 
.... 

Когда я попытался преобразовать выше этой новой скрипкой http://jsfiddle.net/uhsarp/MdvQk/1/

function FormBuilderCtrl($scope){ 
... 

теперь все ломается. Я пытаюсь понять, что такое var scope = this и почему передача области функции не работает.

Кроме того, все директивы Angular делятся на ng: вместо ng- (пример: ng: switch вместо ng-switch). Они эквивалентны? Благодарю.

Update:

Я последовал совету от ответов и модернизировал Угловое версию. Я также удалил var scope = this и сразу ввел область. http://plnkr.co/edit/Clr2T9V8J0z3oxW2HXur?p=preview

Единственная проблема сейчас я сталкиваюсь в том, что всякий раз, когда я изменить тип поля из «текста» до «радиокнопок», я получаю сообщение об ошибке (строка 45 в script.js в указанной выше странице plukr)

TypeError: Cannot call method 'indexOf' of undefined 

Я проверил код, но, похоже, не смог обнаружить проблему.

+0

Да нг: переключатель и ng-переключатель - это два разных способа использования одной и той же директивы. –

+0

Спасибо, Эран. – user6123723

+0

Похоже, вы используете Angular 0.10.5, jsFiddle поддерживает 1.0.2, 1.0.3 и 1.1.1. Я изменил с вашей версии Angular на более новую версию, и некоторые вещи все еще были сломаны, но материал начал работать. Я собираюсь сделать обоснованное предположение и сказать, что «var scope = this» был более старым методом Angular для получения области видимости, а новый метод - передать его в качестве параметра. Вот почему ваш код будет испорчен, так как он будет использовать неподдерживаемые средства для получения правильной области. –

ответ

1

Ваша угловая версия очень старая.

Используйте последний: http://code.angularjs.org/1.1.5/angular.js

Вам необходимо, также, включают нг-приложение в вашем теле тега (или в оберточной дел).

Я не могу найти нигде в docs любую ссылку на стиль тега: Поэтому я рекомендую вам попробовать использовать подход ng-tag.

Последнее, что я настоятельно рекомендую вам прочитать developer guide, чтобы лучше понять, как вы должны скомпрометировать свое приложение.

1

У вас работает очень устаревшая версия Angular.

Я раздвоенный свой fiddle и обновил версию до последней стабильной и обезьяны исправлен скрипт:

  1. я впрыснуть $ объем, как предполагалось
  2. I набор сфера = $ сфера, поэтому я не должен замените его по всему вашему коду.

I.е:

function FormBuilderCtrl($scope){ 
    var scope = $scope; 

Несколько советов, которые, чтобы облегчить ваше развитие, избегая спагетти кодирования:

  • используют различные файлы
  • создать модуль и добавить свои контроллеры/директивы к нему.
1

Beteraraba's имеет право сказать, что вы, вероятно, должны использовать более новую версию AngularJS.

Это, как говорится, это не почему это ломается.

В вашем примере var scope = this просто превращает переменную с именем «scope» в соответствие с этим. Так что позже в коде вы присваиваете функции «this». Например, FormBuilderCtrl(). Редактирование будет установлено в false, потому что внутри этого FormBuilderCtrl() есть this.editing = false;. var scope = this; не имеет ничего общего с областью Angular's!

Если вы хотите использовать $ scope, вам нужно будет ввести его, но это изменит идею этого кода. Если вы решите это сделать, вы можете просто сделать var scope = $scope, и ваш код будет работать, но имейте в виду, что функции и атрибуты, определенные в вашем контроллере, теперь будут применяться к области $ scope, а не только к контроллеру!

Смежные вопросы