Почему эти переменные не печатаются в представлении html?

0

Приложение 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;
}]);
  • 0
    Не могли бы вы построить поршень с ошибкой? Это было бы полезно!
  • 0
    Вы использовали authenticated как функцию, ожидая переменную в представлении html. Измените его на вызов, как показано в ответе @pherris
Показать ещё 1 комментарий
Теги:

2 ответа

3
Лучший ответ

Поскольку authenticated2 является функцией, вам придется вызвать ее:

{{ authenticated2() }}

но похоже, что вы можете уйти с помещением auth (или его частей) в $scope и использовать его напрямую. например, в вашем контроллере:

$scope.auth = auth;

и в вашем HTML:

{{ auth.authenticated2 }}

Это немного запутанно с auth.authenticated2 (а не функцией) и $scope.authenticated2 (function).

  • 0
    {{ authenticated2() }} работает. Но {{ auth.authenticated2 }} прежнему нет. Нужно ли что-то добавить в контроллер, чтобы заставить {{ auth.authenticated2 }} работать?
  • 0
    Вам нужно добавить auth в $scope - не уверен, что вы увидели мое изменение в ответе, где я добавил строку $scope.auth = auth; для контроллера.
Показать ещё 6 комментариев
1

Поскольку речь идет о получении переменной 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>
  • 0
    Где вы auth.getLoginInfo() . Нужно ли добавить это в auth.js ?
  • 0
    во-первых, вы фактически не объявляли здесь метод init() хотя пытались его вызвать, а во-вторых, функция контроллера уже является функцией конструктора . это не только избыточно, но и не обязательно.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню