从不同的Angular控制器多次调用$ wakanda.init

时间:2016-04-21 23:42:57

标签: angularjs ionic-framework wakanda 4d-database

我正在开发一个使用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:无法读取未定义的属性'www4DMionicHomeOverview'

  

ionic.bundle.js:25642 TypeError:无法读取未定义的属性'www4DMionicErrorLog'

取决于我首先调用的两种方法中的哪一种。

我很好奇这是否与我从每个控制器调用$wakanda.init的方式有关。 documentation并没有说这样做很糟糕。

设置Angular服务并解决服务中的$wakanda会更好吗?

2 个答案:

答案 0 :(得分:2)

替换

 $wakanda.init('servers').then(function(ds) {...

通过

$wakanda.init().then(function(ds) {...

并为控制器中的所有人做同样的事情。

在您的情况下,我建议您使用$ wakanda.init()

答案 1 :(得分:1)

我的项目使用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()会失败。