PHP Rocks
angularJS ui.router - Fragen über Fragen... - Druckversion

+- PHP Rocks (https://www.php-rocks.de)
+-- Forum: HTML, CSS, Usability und Barrierefreiheit (https://www.php-rocks.de/https://www.php-rocks.de/forum/11-html-css-usability-und-barrierefreiheit.html)
+--- Forum: JavaScript / JavaScript Frameworks / Ajax (https://www.php-rocks.de/https://www.php-rocks.de/forum/13-javascript-javascript-frameworks-ajax.html)
+--- Thema: angularJS ui.router - Fragen über Fragen... (/https://www.php-rocks.de/thema/93-uirouter-fragen-ueber-fragen.html)



ui.router - Fragen über Fragen... - Till - 25.02.2016

Auch auf die Gefahr hin das ich es selber werd lösen können schmeiß ich mal als Neuling folgende Fragen in den Raum:

Frage 1)
Ich habe ein Template projects.html
Code:
<div ng-controller="projectsCtrl as projectsCtrlInstance">

<h4>Projects</h4>

<ul>
    <li ng-repeat="p in projects">
     <!-- {{$index + 1}}. -->
     <p><strong ng-bind="p.title"></strong></p>  
     <p><span ng-bind="p.dir"></span></p>
    </li>

</ul>


</div>

Und einen stateProvider:
Code:
...
        
    .state( {
      name : 'projects',    
      url: "/projects/:parentProjectID",
      views: {
        "viewA": { templateUrl:  AppData.__DIR__+'templates/projects.html',
                   controller:'projectsCtrl'  },
        "viewB": { templateUrl:  AppData.__DIR__+'templates/project.html' }/**/
       }
     })    
...

Wie man sehen kann ist der Controller projectsCtrl im Template und im stateProvider definiert und wird demzufolge bei mir auch zweimal ausgeführt!
Wo ist der richtige Platz?
Im template kann ich mehrere Controller verwenden und diese auch außerhalb des views, so wie ich es verstehe ist dann der controller im stateProvider ein optionaler state-bezogener zusätzlicher Controller...?

...und damit zu Frage zwei...2)
Im Template main.html habe ich einen Link um die oben unter 1 genannte Geschichte aufzurufen:
Code:
<a ui-sref="projects({projectID:'0', reload:true})"><span>Projects</span></a>
Mein Problem hier ist, daß ich den Link ZWEIMAL klicken muß bis der Scope gerendert wird, also die gewünschten Projekte angezeigt werden.
Laut console werden die Daten jedoch eigentlich schon beim ersten klick in den scope geladen.
Code:
.controller('projectsCtrl', [ '$scope', '$element', '$compile', '$http', '$location', 'API_CLIENT_URL', '$stateParams',
                       function($scope,   $element,   $compile,   $http,   $location,   API_CLIENT_URL, $stateParams) {
            /* todo promise4 */               
       var cb = '__JSONPCALLBACK_projects_'+mt_rand(1000,9999);                    
       frdl.cbs[cb] = function(result){
            console.log('Fetching project');
       /*     frdlBounce(result);
             alert(JSON.stringify(result)); */
         $scope.projects = result.projects;    
/* hilft auch nicht: frdl.UI.Compile(1); */
        $compile($element.contents())(angular.element($element).scope());  
    
          frdl.cbs[cb]=undefined;
      } ;    
      if('undefined'===typeof $stateParams.parentProjectID)$stateParams.parentProjectID=0;
       var cmd = 'frdl project childs --project='+$stateParams.parentProjectID+' -bd --callback=frdl.cbs.'+cb+' --expect=jsonp';
      /* alert(JSON.stringify($stateParams)); */
      
        
        $.cliExec(cmd);      
  }])


Ich glaube hier noch irgendein Verständnisproblem zu haben?
Ich fasse nochmal zusammen:
Ich muß zweimal klicken damit der View upgedated wird.


RE: ui.router - Fragen über Fragen... - Till - 27.02.2016

Zu 1)
Ich habe jetzt den parent controller im stateProvider angegeben und den Sub-Controller im Template?


RE: ui.router - Fragen über Fragen... - Till - 28.02.2016

Ich steige zwar noch nicht ganz durch, meine aber es hilft wenn ich ein resolve : {} object im statProvider definiere...!?


RE: ui.router - Fragen über Fragen... - Till - 28.02.2016

Mh. Im IE 5-11 wird der state nicht upgedated wenn ich auf einen ui-sref link klicke!?


RE: ui.router - Fragen über Fragen... - Till - 29.02.2016

Im IE passiert überhaupt nichts wenn ich auf einen ui-sref link klicke.

Und überhaupt, alles funktioniert hier bei mir bisher nur "irgendwie", der controller wird nun x mal ausgeführt wenn ich zwei-drei states habe

projects  #/projects/:projectID
projects.project #/:main

Und :main bekomme ich irgendwie nur mit Schwierigkeiten in die $stateParams

----> Ich muß die Grundlagen lernen!

Ich tue mich hier irgendwie schwer (speziell mit ui.router).

http://www.angularjshub.com/examples/modules/configurationrunphases/
Code:
 // Register a provider with person management functions and name it "personManager".
 // This provider requires the "person" object instance registered as a value in the
 // "mainModule" and that instance is passed to the constructor through Dependency Injection
 // simply writing "person" (the name of the registered value) as parameter name.
 .provider("personManager", PersonManager)
 // Initial configuration of "mainModule". To get an instance of the "personManager" provider
 // we simply add a parameter to the configuration function with the "Provider" suffix after
 // the name of the registered provider (for the registered "personManager" provider instance
 // we must write "personManagerProvider").
 .config(function (personManagerProvider)
 {
   personManagerProvider.setFullNameSeparator("*");
 })

Ok, "newProjectCtrl as newProjectCtrlInstance" geht jas noch, aber um eine Provider-Instanz von personManager zu erzeugen muß ich eine Variable personManagerProvider benennen?, an solche Namens Konventionen muß man sich erst gewöhnen und irgendwie gefällt mir das nicht so auf Anhieb.
Aber insgesamt finde ich das framework recht interessant, ich muß da nur wohl was "umsortieren"  Confused
...


Zitat:The object returned by the PersonManager function contains the $get method to create a provider instance and a setFullNameSeparator method. The latter is useful to configure the provider instance before it actually gets created