【发布时间】:2016-10-12 20:20:25
【问题描述】:
我不知道为什么第一个状态有效,但第二个无效:
工作状态:
.state('app.pages.invoice', {
url: '/invoice',
templateUrl: "assets/views/pages_invoice.html",
title: 'Invoice',
resolve: {
"currentAuth": ["Auth", function(Auth) {
return Auth.$requireSignIn();
}]
}
})
不工作状态,抛出Error: [ng:areq]:
validationCtrl&p1=not%20aNaNunction%2C%20got%20undefined
.state('app.form.validation', {
controller: "validationCtrl",
url: '/validation',
templateUrl: "assets/views/form_validation.html",
title: 'Form Validate',
resolve: {
"currentAuth": ["Auth", function(Auth) {
return Auth.$requireSignIn();
}]
}
})
第二个仅在通过以下方式注入控制器时才有效:
resolve: loadSequence('validationCtrl')
即(控制器已移至解析中,不再存在 currentAuth):
.state('app.form.validation', {
url: '/validation',
templateUrl: "assets/views/form_validation.html",
title: 'Form Validate',
resolve: loadSequence('validationCtrl')
})
然后我不知道如何将我的currentAuth 元素再次集成到解析中。
如何通过 resolve 注入 validationCtrl.js 并将 currentAuth 元素也添加到 resolve 中?
这里是加载序列函数:
// Generates a resolve object previously configured in constant.JS_REQUIRES (config.constant.js)
function loadSequence() {
var _args = arguments;
return {
deps: ['$ocLazyLoad', '$q',
function ($ocLL, $q) {
var promise = $q.when(1);
for (var i = 0, len = _args.length; i < len; i++) {
promise = promiseThen(_args[i]);
}
return promise;
function promiseThen(_arg) {
if (typeof _arg == 'function')
return promise.then(_arg);
else
return promise.then(function () {
var nowLoad = requiredData(_arg);
if (!nowLoad)
return $.error('Route resolve: Bad resource name [' + _arg + ']');
return $ocLL.load(nowLoad);
});
}
function requiredData(name) {
if (jsRequires.modules)
for (var m in jsRequires.modules)
if (jsRequires.modules[m].name && jsRequires.modules[m].name === name)
return jsRequires.modules[m];
return jsRequires.scripts && jsRequires.scripts[name];
}
}]
};
}
我的第一个状态没有任何控制器,所以我可以单独解决 currentAuth。但是当视图有控制器时,添加 currentAuth 会导致控制器不再工作。
注意:
我的 currentAuth 取自 here。
更新:
这里是validationCtrl.js:
app.controller('ValidationCtrl', ["$scope", "$state", "$timeout", "SweetAlert", "$location",
function ($scope, $state, $timeout, SweetAlert, $location) {
...
更新 2:
基本上问题是只允许当前登录的用户查看属于app. 的子页面;所以我的父视图是这样的:所以基本上我希望将 currentAuth 工厂注入主父视图,并且孩子应该继承它。除非解决父级中的 currentAuth,否则无法查看它们。
$stateProvider.state('app', {
url: "/app",
templateUrl: "assets/views/app.html",
resolve: loadSequence('modernizr', 'moment', 'angularMoment', 'uiSwitch', 'perfect-scrollbar-plugin', 'toaster', 'ngAside', 'vAccordion', 'sweet-alert', 'chartjs', 'tc.chartjs', 'oitozero.ngSweetAlert', 'chatCtrl'),
abstract: true
})
编辑 1:
我在这里将问题换成well 并试图找到多个解决状态的答案。
编辑 2:
这里是 main.js:pastebin url
和验证Ctrl.js pastebin url.
实际上,validationCtrl 只是我拥有的其他控制器中的一个示例控制器。
问题是如何阻止子视图的视图权限,除非父 currentAuth 已解决?鉴于我不知道如何使用负载序列和单例工厂处理多个解析。
【问题讨论】:
-
您是否在控制器中定义了 CurrentAuth?你得到什么样的错误?
-
@ObasiObenyOj 正如文档github.com/firebase/angularfire/blob/master/docs/guide/… 所说,我只需要将它放入控制器和函数中,仅此而已,对吧?
-
我可以查看您的完整验证Ctrl.js 和您的mainapp.js 文件吗?
-
@pritishvaidya 我用 pastebin 链接添加了更新。
-
谢谢,我会尽力的:)
标签: javascript angularjs firebase-authentication angularfire