Приложение AngularJS имеет переменную с именем authenticated2
которая должна быть доступна в виде html. Но значение не выводится на экран.
Какие конкретные изменения могут быть внесены в код ниже, чтобы убедиться, что значение authenticated2
напечатано на экране?
Вот соответствующий html:
auth.authenticated2 is: {{ auth.authenticated2 }} <br>
authenticated2 is {{ authenticated2 }} <br>
$scope.authenticated2 is {{ $scope.authenticated2 }} <br>
<div ng-show="auth.authenticated2=='yes'">
<h1>Show some stuff.</h1>
</div>
Как бы то ни было, ничего не распечатывается, когда загружается вышеуказанное представление html. Но контроллер подключен к представлению, потому что другие объекты в представлении загружаются на основе других переменных в контроллере.
Вот соответствующий материал в контроллере security.js
:
angular.module('secure', ['auth']).controller('secure', function($scope, $http, $sce, auth) {
$scope.authenticated1 = function() {
if(auth.authenticated1=='yes'){return true;}
else{return false;}
}
$scope.authenticated2 = function() {
if(auth.authenticated2=='yes'){return true;}
else{return false;}
}
//bunch of unrelated stuff
$scope.$on('$viewContentLoaded', function() {
//bunch of unrelated stuff
}
});
И вот материал, относящийся к auth.js
:
angular.module('auth', ['ngCookies']).factory('auth', ['$rootScope', '$http', '$location', '$cookies', function($rootScope, $http, $location, $cookies){
var auth = {
authenticated1 : $cookies['AUTH1'],
authenticated2 : $cookies['AUTH2'],
//bunch of unrelated stuff
init : function(homePath, loginPath, logoutPath) {
//bunch of unrelated stuff
}
};
return auth;
}]);
Поскольку authenticated2
является функцией, вам придется вызвать ее:
{{ authenticated2() }}
но похоже, что вы можете уйти с помещением auth
(или его частей) в $scope
и использовать его напрямую. например, в вашем контроллере:
$scope.auth = auth;
и в вашем HTML:
{{ auth.authenticated2 }}
Это немного запутанно с auth.authenticated2
(а не функцией) и $scope.authenticated2
(function).
{{ authenticated2() }}
работает. Но {{ auth.authenticated2 }}
прежнему нет. Нужно ли что-то добавить в контроллер, чтобы заставить {{ auth.authenticated2 }}
работать?
auth
в $scope
- не уверен, что вы увидели мое изменение в ответе, где я добавил строку $scope.auth = auth;
для контроллера.
Поскольку речь идет о получении переменной auth в области видимости, я могу предложить вам установить переменную auth в некоторой init.
angular.module('secure', ['auth']).controller('secure',
function($scope, $http, $sce, auth) {
init();
function(){
//It is good to have an init method if you have some sigin activies
//before setting every variable else where
$scope.auth ={};
auth.getLoginInfo().then(function(res){
var auth = {};
auth.authenticated2 = res.authenticated2;
$scope.auth = auth;
});
}
$scope.authenticated1 = function() {
if(auth.authenticated1=='yes'){return true;}
else{return false;}
}
$scope.authenticated2 = function() {
if(auth.authenticated2=='yes'){return true;}
else{return false;}
}
//bunch of unrelated stuff
$scope.$on('$viewContentLoaded', function() {
//bunch of unrelated stuff
}
});
В вашем HTML он остается таким же, как:
auth.authenticated2 is: {{ auth.authenticated2 }} <br>
authenticated2 is {{ authenticated2() }} <br>
<div ng-show="auth.authenticated2=='yes'">
<h1>Show some stuff.</h1>
</div>
auth.getLoginInfo()
. Нужно ли добавить это в auth.js
?
init()
хотя пытались его вызвать, а во-вторых, функция контроллера уже является функцией конструктора . это не только избыточно, но и не обязательно.