我有一个登录屏幕,当用户输入正确的凭据时,将能够获取JSON数据。目前我还没有真正的API链接。我只是使用脚本文件中的虚拟JSON数据。 loginCtrl将参数传递给'dummydata'工厂,该工厂将发出'GET'请求。成功时,该因子将JSON数据传递给工厂中的'useData'函数。工厂中的此功能是我的ng-view中的所有控制器都使用的功能。
我遇到的问题是所有其他控制器都在调用'dummyData.dashboardsData'并且未定义,因为没有人登录将数据传递给该函数。如何防止控制器(例如,navCtrl)在有人登录之前调用工厂?
这是我的索引文件:
<body ng-app="ciscoImaDashboardApp" ng-style="{'background-image': backgroundImg}" ng-controller="loginCtrl">
<login></login>
<div ng-view></div>
<menu></menu>
</body>
这是我的工厂:
angular.module('ciscoImaDashboardApp').factory('dummyData', ['$q', '$http', function($q, $http) {
var apiServices = {};
apiServices.login = function(user,password,callback) {
$http({method: 'GET', url: 'scripts/services/dummydata.js'})
.success(function (response) {
dataStatus = response.success;
apiServices.useData(response);
callback(dataStatus);
})
.error(function(error) {
console.log("There was an error: " + error);
});
};
apiServices.useData = function(response) {
var data = response.data;
apiServices.dashboardsData = data;
}
return apiServices;
}]);
这是我的navCtrl:
angular.module('ciscoImaDashboardApp')
.controller('navCtrl', function($scope, navService, $location, dummyData) {
var data = dummyData.dashboardsData;
});
这是我的loginCtrl:
angular.module('ciscoImaDashboardApp')
.controller('loginCtrl', function ($scope, $rootScope, dummyData, $location) {
$scope.login = function() {
var user_email = $scope.email;
var user_password = $scope.password;
dummyData.login(user_email, user_password, function (dataStatus) {
if (dataStatus) {
console.log("Success!");
$scope.loggedIn = true;
$location.path('/welcome');
} else {
console.log("Error");
}
});
}
});