it-roy-ru.com

Ошибка директив AngularJS - Невозможно прочитать свойство 'compile' из неопределенного

Новичок в AngularJS и пытается создать простую директиву. Код завершается с ошибкой TypeError: Невозможно прочитать свойство 'compile' из неопределенного. Любые предложения будут ценны.

JS

var xx = angular.module('myApp', []);
xx.directive('myFoo', 
             function(){
                 return 
                 {
                     template:'23'
                 };                     
});

HTML

<div ng-app="myApp">
<div my-foo></div>
</div>

Вы можете найти код и ошибку здесь https://jsfiddle.net/p11qqrxx/15/

11
user275157

Это просто ваше возвращение.

Плохой:

return 
{} // This returns undefined, return is odd and doesn't look at the next line

Хорошо:

return{
} // Returns an empty object, always open your object on the same line as the return

Лучше:

var directive = {};
return directive; // How I always do it, to avoid the issue.
34
Dylan Watt

Это не проблема Angular, а способ написания и исполнения синтаксисов возврата javascript. Я создал простое видео, которое демонстрирует эту проблему более подробно. Вы можете увидеть это видео по этой ссылке. 

https://www.facebook.com/shivprasad.koirala/videos/910570055693818/

Теперь для длинного ответа. В JavaScript «возврат» и «возврат»; одно и то же, а "{}" является анонимной функцией.

Когда вы пишете return и «{» в следующей строке, два оператора возвращаются один раз, а «{}» является анонимной функцией. Программа возвращается из синтаксиса «возврата», и код внутри фигурной скобки никогда не выполняется, или мы можем сказать, это недостижимый код. Так что он возвращает обратно «неопределенный».

return  // returns from this step itself
{
  // any code here will never execute
 // unreachable code
}

Когда вы пишете фигурную скобку сразу после возврата, она обрабатывает их как один блок кода, а также выполняет код внутри фигурной скобки.

return{
// any code here will execute
}

Так что все дело в том, где находится ваша фигурная скобка после оператора return.

1
Shivprasad Koirala

xx.directive ( 'MYFOO',

function () { var obje = { restrict: 'A', // по умолчанию его A нет необходимости объявлять . шаблон: «23» return obje; }} .__).

0
ravinder

Вы также ссылались на AngularJs 1.0.0, который был слишком стар, я обновил его до 1.1

Изменить директиву на это

xx.directive('myFoo',

function () {
    return {
        restrict: 'A', //defaults its A no need of it to declare.
        template: '23'
    };
});

Работает Fiddle

0
Pankaj Parkar