2015-04-09 13 views
8

Nowicjusz do AngularJS i próba utworzenia prostej dyrektywy. Kod kończy się niepowodzeniem z TypeError: Nie można odczytać właściwości 'compile' niezdefiniowanej. Wszelkie sugestie będą bardzo mile widziane.Wystąpiły błędy w dyrektywach AngularJS - Nie można odczytać właściwości "kompilacji" nieokreślonego.

JS

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

HTML

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

można znaleźć kod i błędów tutaj https://jsfiddle.net/p11qqrxx/15/

+0

AngularJS 1.0.0, naprawdę? – Blackhole

+0

Nowość w AngularJS. Czy to jest składnia angularjs 1.0? Używam AngularJS 1.2 – user275157

Odpowiedz

30

To tylko twoja return.

Źle:

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

Dobre: ​​

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

Lepiej:

var directive = {}; 
return directive; // How I always do it, to avoid the issue. 
+0

czy mógłbyś wyjaśnić, z fiddle? –

+0

To wyjaśnia podstawy tego, co mówię: https://jsfiddle.net/L6kmcbnL/. Kwestia tutaj nie ma nic wspólnego z kanciastą, tak naprawdę, jak działa javascript. '.directive' oczekuje argumentu funkcji, która zwraca obiekt konfiguracyjny dla dyrektywy. Funkcja pierwotnego pytania zwraca 'niezdefiniowany' zamiast obiektu konfiguracyjnego. –

+0

odtworzyć go z dyrektywą .. Doceniam to –

0

też mowa angularjs 1.0.0 który był zbyt stary, ja zaktualizowano go do wersji 1.1

Zmiana dyrektywy do tej

xx.directive('myFoo', 

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

Working Fiddle

1

To nie jest kwestia kątowa, ale jego droga javascript składnie powrotne są napisane i wykonywane. Stworzyłem prosty film, który bardziej szczegółowo pokazuje ten problem. Możesz obejrzeć ten film wideo z tego linku.

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

Teraz na dłuższą odpowiedź. W javascript "return" i "return;" są takie same, a "{}" jest funkcją anonimową.

Kiedy piszesz return i "{" w następnym wierszu, dwie jego instrukcje zwracają jeden, a "{}" jest anonimową funkcją. Program zwraca ze składni "return", a kod wewnątrz nawiasów klamrowych nigdy nie jest wykonywany lub możemy powiedzieć, że jest nieosiągalnym kodem.Więc zwraca "nieokreślony".

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

Podczas pisania kręcone wspornik tuż po powrocie statment traktuje je jako jeden blok kodu, a także wykonuje kod wewnątrz kręcone wsporniku.

return{ 
// any code here will execute 
} 

Tak więc chodzi o to, gdzie jest nawias klamrowy po instrukcji return.

0

xx.directive ('myFoo'

funkcja() { var obje = { uniemożliwić: 'a' // domyślne jego bez potrzeby na stwierdzenie szablon. '23' return obje; } });

Powiązane problemy