25.02.2016, 14:22
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
Und einen stateProvider:
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:
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.
Ich glaube hier noch irgendein Verständnisproblem zu haben?
Ich fasse nochmal zusammen:
Ich muß zweimal klicken damit der View upgedated wird.
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>
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.