简体   繁体   中英

Angular, queuing ng-init

Is it possible queuing ng-init? Generally, in first init I want to add JSON file to prototype vars (array) and in another init depending on the params I want to skip getJsonData() or add other JSON file to prototype.

function init(param) {
        console.log("startInit");

        // big JSON file
        var promise =  getJSON(param);  
        return promise.then( function() {
            //some func
            console.log("finish");
            return true;
        });
    };

    function getJSON(param) {
        var deferred = $q.defer();
        console.log("startInitDataInner");
            someService.getJsonData(param).then(function(data) {
                // some code
                console.log("endInitDataInner");
                deferred.resolve();

            }, function(error) {
                deferred.reject();
            });

        return deferred.promise; 

    }; 

in view ng-init

ng-init="init(param)"
ng-init="init(param)"
// ...

and log:

startInit
startInitDataInner
startInit
startInitDataInner
endInitDataInner
finish
endInitDataInner
finish
//..


Edit:
Generally, I want to create something like plugin in jQuery. I have this code:

<div ng-controller="parentController as parent">
   <div ng-controller="childController as child" ng-init="child.init(parent.data)"></div>
</div>

<div ng-controller="parentController as parent">
   <div ng-controller="childController as child" ng-init="child.init(parent.data2)"></div>
</div>

and configurable part by user:

 angular.module('myApp').controller('parentController', ['$scope', function($scope) {
 this.data = {
    config: {
       lang: "en",
       title: "title"
       }
 };
 this.data2 = {
    config: {
       lang: "pl",
       title: "title2"
    }
 };         
 }]);

ng-init update api:

angular.extend(this, parent.data);

Do you have any ideas how I should do it differently?

Well, if you are working with angular, you use controllers. What is controller itslfmin general meaning? Right, its a constructor function. The main word here is function . What does function in general? Run the code inside.

So, just place your initial logic at the beggining of controller code (but without wrapping it as a separate function) and it will run just in time your controller will be resolved by angular resolver.

var controller = function () {
    // vars, costs, etc.
    console.log("startInit");

    // big JSON file
    var promise =  getJSON(param);  
    return promise.then( function() {
        //some func
        console.log("finish");
        return true;
    });

};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM