5

staram się oddzielić część mojej aplikacji do dyrektywy, ale wciąż otrzymuję to:

Multiple directives [tree (module: anbud), tree (module: anbud)] asking for template on: 

Może to być spowodowane przez:

Multiple directives requesting isolated scope. 
Multiple directives publishing a controller under the same name. 
Multiple directives declared with the transclusion option. 
Multiple directives attempting to define a template or templateURL. 

mam widok, który wygląda tak:

 <tree></tree> 

dyrektywa wygląda tak:

(function (module) { 

    var tree = function() { 

     return { 
      restrict: "E", 
      controller: "treeController", 
      templateUrl: "/app/NSviewer/templates/parts/tree.html" 
     }; 

    }; 

    module.directive("tree", tree); 

}(angular.module("anbud"))); 

mój kontroler jest bardziej złożona:

(function() { 
    'use strict'; 

    angular.module('anbud') 
     .controller('treeController', ['$scope', 'api', '$log', 'localStorage', 'jwt', function ($scope, api, $log, localStorage, jwt) { 

      // on successfull request 
      function onJson(json) { 

       //$scope.data = json; 
       console.log($scope.data) 

       // set default 
       $('#loading').hide(); 

       $scope.data = {}; 
       $scope.data[0] = {}; 
       $scope.data[0].c = "NS 3420"; 
       $scope.data[0].n = "2015"; 
       $scope.data[0].i = json.i; 
       ; 
      } 

      // error getting json 
      function onError(e) { 

       console.log('error:'); 
       console.log(e); 

       if (e.status === -1) { 
        throw 'Fikk ikke tak i server, sjekk internetforbindelsen din. [404]'; 
       } else if (e.status === 0) { 
        throw 'No connection. Verify application is running. [0]'; 
       } else if (e.status == 404) { 
        throw 'Fikk ikke tak i server, sjekk internetforbindelsen din. [404]'; 
       } else if (e.status == 401) { 
        throw 'Unauthorized [401]'; 
       } else if (e.status == 405) { 
        throw 'HTTP verb not supported [405]'; 
       } else if (e.status == 500) { 
        throw 'Internal Server Error [500].'; 
       } else { 
        throw 'Noe gikk galt. [' + e.status + ']'; 
       } 
      } 

      function onJsonPart(code, json) { 

       console.log('Code: ' + code); 
       console.log('json:'); 
       console.log(json); 

       // validate JSON 
       if (angular.isUndefined(json)) { 
        $log.error('Mottok ingen JSON for ns kode: ' + code); 
        console.log('Mottok ingen JSON for ns kode: ' + code); 
        return; 
       } 

       // check for code in root node in json 
       console.log('$scope.data:'); 
       console.log($scope.data); 

       if (angular.isUndefined($scope.data)) { 
        $log.error('Scope data is not defined'); 
        return; 
       } 

       // TODO: 
       // Skal enten være 26 eller 27, vet ikke om 'Felles bestemmelser' skal være med 
       if (($scope.data[0].i.length !== 26 || $scope.data[0].i.length !== 27) === false) { 
        $log.error('NS koder er ikke lasted ned lokalt!'); 
        return; 
       } 

       // loop gjennom layer 0 av treet 
       // get object containing all ns codes 
       var j = $scope.data[0]; 

       // layer 0 
       for (var l0 = 0; l0 < j.i.length; l0++) { 

        // layer 1 
        for (var l1 = 0; l1 < j.i[l0].i.length; l1++) { 

         // fint node in tree 
         if (j.i[l0].i[l1].c === code) { 

          // append to tree 
          j.i[l0].i[l1].i = json.i; 
          return; 
         } 


        } 
       } 

       $log.error('Fant ikke NS kode: "' + code + '"'); 

      } 

      // get json part to append to tree 
      $scope.get = function (code) { 

       // Kun layer 1, AB - AV, BE3 til BE8, CD, CH, CY etc 
       if (code.length > 3 || code.length < 2) { 
        $log.error('NS kode ikke godkjent!'); 
        return; 
       } 

       api.get(code) 
        .then(
         function (json) { 
          onJsonPart(code, json); 
         }, 
         function (error) { 
          onError(error); 
         } 
       ); 
      }; 

      console.log('Getting JSON!'); 
      api.getFirstThreeLayers().then(onJson, onError); 


     }]); 

}()); 

Nie mam pojęcia co może być przyczyną tego problemu ..

Odpowiedz

6

Jest to prawdopodobnie spowodowane, gdy aplikacja robi to kątowej dwa razy.

Powinieneś zobaczyć ostrzeżenie w konsoli programistów przeglądarki, że Angular został zainicjowany dwa razy.

Sprawdź to samo w pliku HTML, w którym znajduje się plik AngularJS.

Innym powodem jest to, że dwa razy dodaje się dyrektywę, gdy dyrektywy te tworzą izolowany zakres lub próbują wyrenderować szablon.

+0

na konsoli nie ma żadnego ostrzeżenia. Nie myśl, że Angular jest wywoływany dwa razy. – ganjan

+0

OK, czy możesz pokazać fragment kodu HTML, w którym używasz dyrektywy 'tree'? –

+4

Dwa razy dodałem treeDirective.js do html ... – ganjan