Ich habe eine Indexseite index.html
mit seinem Controller indexController
. Ich habe einen Wert ($ scope.ipAddress) in einem factory
in der indexController
gesetzt, die von anderen Controllern des html innerhalb ng-view
verwendet wird.Führe einen Controller aus, nachdem der Hauptcontroller ausgeführt wurde
Wenn die Seite geladen wird, wird der erste indexController
ausführen soll, auf einen Wert in der factory
und dann wird dieser Wert durch andere Steuerungen von Seiten innerhalb ng-view
verwendet.
Aber ich denke, die anderen Controller werden zuerst vor indexController
ausgeführt und ich bekomme undefiniert für den Wert ich gesetzt.
Dies ist indexController
mit factory
:
angular.module('tollApp')
.controller('indexController', function($scope,$http,$window,userDetailsFactory){
$scope.usernameFromServer={};
$scope.getUserDetails = function(){
$http({
method:'GET',
url:'http://192.168.1.80:4000/getUserDetails'
// url:'http://websitename.com/getUserDetails'
})
.then(function(response){
// console.log(JSON.stringify(response));
userDetailsFactory.setUserDetailsInFactory(response.data);
$scope.usernameFromFactory = userDetailsFactory.getUserDetailsFromFactory().usernameFromSession;
$scope.theIP = userDetailsFactory.getUserDetailsFromFactory().ipAddress;
// $scope.usernameFromServer = userDetailsFactory.getUserDetailsFromFactory().username;
// console.log(JSON.stringify($scope.usernameFromFactory)+"usernameFromFactory");
})
}
$scope.logout = function(request,response){
$http({
method:'GET',
url:'/logout'
})
.then(function(response){
console.log(JSON.stringify(response));
if(response.data=="logout"){
// $window.location.href="http://websitename.comlogin";
$window.location.href="http://192.168.1.80:4000/login";
}
})
}
console.log("indexController");
}).factory('userDetailsFactory',function(){
var user = {};
return {
setUserDetailsInFactory : function(val){
user.useridFromSession = val[0].UserID;
user.usernameFromSession = val[0].UserName;
user.userroleFromSession = val[0].UserRole;
user.clientidFromSession = val[0].ClientID;
user.ipAddress = "http://192.168.1.80:4000/";
// user.ipAddress = "http://websitename.com/";
// console.log("in set "+user.clientidFromSession);
},
getUserDetailsFromFactory : function(){
return user;
}
};
})
Der andere Controller, wo ich den Wert von der Fabrik verwendet werden:
$scope.ipForHttp = userDetailsFactory.getUserDetailsFromFactory().ipAddress;
console.log($scope.ipForHttp); //undefined
$scope.loading = false;
$scope.ClientID = userDetailsFactory.getUserDetailsFromFactory().clientidFromSession;
// $scope.dev={};
$scope.getDevice =function(){
console.log($scope.ipForHttp); //undefined
$scope.loading = true;
$http({
method : "GET",
url : $scope.ipForHttp+"getDeviceDetailsReport"
}).then(function mySucces(response) {
OP, gibt es eine viel bessere Möglichkeit, diese Aufgabe zu lösen - mit Service und Promises ([$ q] (https://docs.angularjs.org/api/ng/service/$q) um genau zu sein). Sie sollten sich die Dokumente und Beispiele ansehen und versuchen, es selbst herauszufinden. Tipp - Der Code, der mehrere abhängige Elemente enthält, sollte auf den Server verschoben werden. Wenn Sie Hilfe brauchen - einfach kommentieren und ich zeige Ihnen die richtige Lösung. –
Es ist der Code, der an den "anderen Controller" gehen soll, ich werde dem Code Kommentare hinzufügen, um es Ihnen leichter zu machen, –
zu verstehen. Der 'newValue' ist leer, wenn ich' console.log() '. Es ist '{}'. Ich habe ein 'Zeitlimit 'auf' indeController 'gesetzt (Controller, wo ich den Wert in der Fabrik festlege). so dass es mein oben angegebenes Problem simuliert, das nur auftritt, wenn ich hosten. Wenn ich das 'Timeout' entferne, bekomme ich alle Werte. – Abhi