【问题标题】:Angular, queuing ng-initAngular,排队 ng-init
【发布时间】:2016-01-03 21:45:00
【问题描述】:

是否可以排队 ng-init? 通常,在第一个初始化中,我想将 JSON 文件添加到原型 vars(数组)中,在另一个初始化中,根据参数,我想跳过 getJsonData() 或将其他 JSON 文件添加到原型中。

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; 

    }; 

在视图中 ng-init

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

并记录:

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


编辑:
一般来说,我想在 jQuery 中创建类似插件的东西。我有这个代码:

<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>

以及用户可配置的部分:

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

ng-init 更新 api:

angular.extend(this, parent.data);

你有什么想法我应该怎么做?

【问题讨论】:

  • 不要为此使用ng-init
  • 这不是appropriate use for ng-init。如果您没有为 ng-repeat 的属性设置别名或尝试从服务器端脚本初始化参数,请使用控制器来初始化您的变量。
  • ng-init 是进行异步调用并在其上具有依赖代码的错误选择。查看文档docs.angularjs.org/api/ng/directive/ngInit
  • 我假设您发布的答案实际上是为了提供有关该问题的更多信息。我仍然认为这不是ng-init 的正确用法。如果您尝试制作“可配置插件”,那么您应该考虑创建指令而不是嵌套子控制器。

标签: javascript angularjs ng-init


【解决方案1】:

好吧,如果您使用 Angular,则使用控制器。控制器 itslfmin 的一般含义是什么?对,它是一个构造函数。这里的主要词是功能。一般有什么作用?运行里面的代码。

因此,只需将您的初始逻辑放在控制器代码的开头(但不要将其包装为单独的函数),它将及时运行您的控制器将被角度解析器解析。

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;
    });

};

【讨论】:

    猜你喜欢
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多