Angularjs 从不同角度控制器多次调用$wakanda.init
我正在开发一个在Wakanda Digital App Factory 1.0.3中构建的移动应用程序,使用Ionic和AngularJS以及4D后端数据库 我有两种不同的4D方法可通过4D Mobile通过两个单独的4D表使用,这两个4D表可通过两个不同的角度控制器访问:Angularjs 从不同角度控制器多次调用$wakanda.init,angularjs,ionic-framework,wakanda,4d-database,Angularjs,Ionic Framework,Wakanda,4d Database,我正在开发一个在Wakanda Digital App Factory 1.0.3中构建的移动应用程序,使用Ionic和AngularJS以及4D后端数据库 我有两种不同的4D方法可通过4D Mobile通过两个单独的4D表使用,这两个4D表可通过两个不同的角度控制器访问: .controller('homeCtrl', function($scope, $wakanda) { $wakanda.init('servers').then(function(ds) { ds
.controller('homeCtrl', function($scope, $wakanda) {
$wakanda.init('servers').then(function(ds) {
ds.servers.www4DMionicHomeOverview().$promise.then(function(event) {
$json = event.result;
$scope.overview = $json.servers;
$scope.healthCheck = $json.healthCheck;
}, function(err) {
debugger
console.log(err);
});
}, function(err) {
debugger
console.log(err);
});
})
.controller('errorLogCtrl', function($scope, $wakanda) {
$wakanda.init('server_log').then(function(ds) {
ds.server_log.www4DMionicErrorLog().$promise.then(function(event) {
$json = event.result;
$scope.errors = $json;
}, function(e) {
debugger
console.log(e);
});
}, function(e) {
debugger
console.log(e);
});
})
我注意到调用这些4D方法时出现了一个奇怪的问题,即第一个方法可以工作,但第二个方法将失败,无论我首先调用哪个方法。也就是说,如果我先调用ds.server\u log.ww4dmionicErrorLog()
,它会工作,但随后调用ds.servers.www4DMionicHomeOverview()
会失败,直到我刷新浏览器
相反,如果我先调用ds.servers.www4DMionicHomeOverview()
,它就会工作,但随后调用ds.server\u log.ww4dmionicorlog()
会失败
第二种方法的错误是: ionic.bundle.js:25642 TypeError:无法读取未定义的 或 ionic.bundle.js:25642 TypeError:无法读取未定义的 取决于我首先调用的两个方法中的哪一个
我很好奇这是否与我如何从每个控制器调用
$wakanda.init
有关。政府并没有说这样做不好
设置角度服务并在服务中解析$wakanda
是否更好 更换
$wakanda.init('servers').then(function(ds) {...
借
并对控制器中的所有对象执行相同的操作
在您的情况下,我建议您使用$wakanda.init()我的项目使用1.3.7 AngularJS 为了提高效率,我将呼叫次数减少到
$wakanda.init().then(function oninit(ds) {
$rootScope.ds = $wakanda.$ds;
将来的调用使用$rootScope.ds
但是,我的每个服务都有自己对$wakanda.init()的调用
我发现在UI控制器中,对$wakanda.init()的多次调用将失败。在wakanda源代码中找到这些注释“init method to execute once on your application(将检索WAF目录、数据库描述)”和“init部分完成后,您可以通过此singleton方法访问数据存储”
$wakandaResult.getDatastore=function(){
。因此,假设您只能初始化一次,文档中必须显示两个示例,而不是一个示例app@Tim:我不知道wakanda,但如果您使用ui路由器,我建议您解决$wakanda.init('xxx')问题在每个状态下,然后在控制器中注入结果等。让我们知道结果,PS:不要忘记使用调试器:)谢谢!这似乎可以工作,表明可以从多个不同的控制器调用$wakanda.init
。但是,从LoginController a调用$wkanda.init
一次会更好吗然后从其他控制器中使用var ds=$wakanda.getDataStore();
?如果是这样,如何才能保证使用var ds=$wakanda.getDataStore();
?
$wakanda.init().then(function oninit(ds) {
$rootScope.ds = $wakanda.$ds;
userCredentials: function(login,password,validate) {
var deferred = $q.defer();
$wakanda.init().then(function oninit(ds) {
ds.User.userCredentials(login,password,validate, {
onSuccess: function(data) {
deferred.resolve(data);
},
onError: function(err) {
deferred.reject(err.message);
}
});
}); //$wakanda.init()
return deferred.promise;
},