从不同的 Angular 控制器多次调用 $wakanda.init
Calling $wakanda.init multiple times from different Angular controllers
我正在使用 Ionic 和 AngularJS 以及 4D 后端数据库开发内置于 Wakanda Digital App Factory 1.0.3 中的移动应用程序。
我有两种不同的 4D 方法可通过 4D-Mobile 通过两个单独的 4D 表使用,这两个表可通过两个不同的 Angular 控制器访问:
.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_log.www4DMionicErrorLog()
它会起作用,但随后对 ds.servers.www4DMionicHomeOverview()
的调用会失败,直到我刷新浏览器。
反之亦然,如果我先调用 ds.servers.www4DMionicHomeOverview()
然后它工作但随后调用 ds.server_log.www4DMionicErrorLog()
失败。
我得到的第二种方法的错误是:
ionic.bundle.js:25642 TypeError: Cannot read property 'www4DMionicHomeOverview' of undefined
或
ionic.bundle.js:25642 TypeError: Cannot read property 'www4DMionicErrorLog' of undefined
取决于我先调用这两种方法中的哪一种。
我很好奇这是否与我从每个控制器调用 $wakanda.init
的方式有关。 documentation并没有说这样做不好。
设置一个 Angular 服务并在服务中解析 $wakanda
会更好吗?
替换
$wakanda.init('servers').then(function(ds) {...
来自
$wakanda.init().then(function(ds) {...
对所有控制器执行相同的操作。
对于你的情况,我建议你使用 $wakanda.init()
我的项目使用 1.3.7 AngularJS
为了提高效率,我减少了对
的调用次数
$wakanda.init().then(function oninit(ds) {
$rootScope.ds = $wakanda.$ds;
以后的调用使用 $rootScope.ds.
但是我的每个服务都有自己的调用 $wakanda.init();
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;
},
我发现在 UI 控制器中多次调用 $wakanda.init() 会失败。
我正在使用 Ionic 和 AngularJS 以及 4D 后端数据库开发内置于 Wakanda Digital App Factory 1.0.3 中的移动应用程序。
我有两种不同的 4D 方法可通过 4D-Mobile 通过两个单独的 4D 表使用,这两个表可通过两个不同的 Angular 控制器访问:
.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_log.www4DMionicErrorLog()
它会起作用,但随后对 ds.servers.www4DMionicHomeOverview()
的调用会失败,直到我刷新浏览器。
反之亦然,如果我先调用 ds.servers.www4DMionicHomeOverview()
然后它工作但随后调用 ds.server_log.www4DMionicErrorLog()
失败。
我得到的第二种方法的错误是:
ionic.bundle.js:25642 TypeError: Cannot read property 'www4DMionicHomeOverview' of undefined
或
ionic.bundle.js:25642 TypeError: Cannot read property 'www4DMionicErrorLog' of undefined
取决于我先调用这两种方法中的哪一种。
我很好奇这是否与我从每个控制器调用 $wakanda.init
的方式有关。 documentation并没有说这样做不好。
设置一个 Angular 服务并在服务中解析 $wakanda
会更好吗?
替换
$wakanda.init('servers').then(function(ds) {...
来自
$wakanda.init().then(function(ds) {...
对所有控制器执行相同的操作。
对于你的情况,我建议你使用 $wakanda.init()
我的项目使用 1.3.7 AngularJS
为了提高效率,我减少了对
的调用次数$wakanda.init().then(function oninit(ds) {
$rootScope.ds = $wakanda.$ds;
以后的调用使用 $rootScope.ds.
但是我的每个服务都有自己的调用 $wakanda.init();
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;
},
我发现在 UI 控制器中多次调用 $wakanda.init() 会失败。