【发布时间】: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