2016-03-25 1 views
1

я что-то очень элементарное ....Angularjs как изменить текст в представлении с контроллера иной точки зрения в

отсутствующего у меня есть три представления, созданное в angularJS: заголовок, тело и нижние колонтитулы. Я хочу изменить текст в заголовке от входа в систему для входа в систему после успешного входа в систему, а также от выхода из системы, чтобы войти в систему, когда пользователь вышел из системы.

Мои файлы/код:

index.php:

<div ui-view="header"></div> 
    <div ui-view="main"></div> 
    <div ui-view="footer"></div> 

header.page.html (я думаю, что я хочу, нг-привязывать или {{некоторые вар}} здесь)

<li><a href="#login" >Login</a></li> 

login.component.js (не уверен, как получить значение в header.page.html)

login(){ 
     var user = { 
      company: this.company, 
      username: this.username, 
      password: this.password 
     }; 
     var me = this; 
     this.$auth 
      .login(user) 
      .then(function (response) { 
       me.$auth.setToken(response.data); 


// CHANGE LOGIN TO LOGOUT IN HEADER 



       me.$state.go('app.dashboard'); 
      }) 
      .catch(function (response) { 
       console.log("error response", response); 
      }) 
    }; 

А функция выхода из системы (не уверен, как получить значение header.page.html)

function dashboardController($state, $scope, $auth){ 
$scope.isAuthenticated = function() { 
    return $auth.isAuthenticated(); 
}; 
document.title = "Dashboard"; 
$scope.logout = function() { 
    $auth.logout(); 

    //change Logout To Login text in header 

    $state.go('app.home'); 
}; 

}

+0

Ввести '$ rootScope' на ваш контроллер и привязать его к нему –

+0

Вы можете транслировать сообщение входа/выхода из системы. Я не уверен, что это лучший вариант, но он будет работать. –

+0

Alon Eitan Я предполагаю, что я надеялся избежать $ rootScope, но ваш комментарий помог моему поиску .... в настоящее время сейчас читает страницу о том, почему не использовать rootScope, но эй, я просто хочу, чтобы это сработало .... что сказал бы было сделано 24 часа назад с jquery – Iannazzi

ответ

0

Вы можете использовать $ радиопередачу, $ испускают и $ на. Подробнее о: https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope

Другое решение будет использовать $ rootScope, но позаботьтесь о его политизации.

Насколько это касается какой-либо информации, связанной с приложением, например, информации о пользователе, честно говоря, решение, основанное на $ rootScope, не совсем ошибочно.

Вы должны определенно избегать $ rootScope для получения подробной информации о конкретном объекте.

Я хотел бы узнать больше об использовании трансляции, чтобы решить.

+0

По иронии судьбы, похоже, мне нужно транслировать на rootScope, поскольку нет отношений родитель-потомок. Логин является дочерним компонентом основного вида, но основной вид не имеет отношения к заголовку. Это и ваше понимание? – Iannazzi

+0

$ broadcast всегда делается из $ rootScope до объекта $ scope. Но учтите, что использование $ rootScope на самом деле не является плохим выбором, если информация касается всего приложения. Иногда гораздо проще использовать $ rootScope для хранения, например, привилегий пользователя, и обращаться к нему напрямую по всему приложению. –

0

Если вы хотите изменить только текст в виде заголовка входа в систему, вы можете получить доступ к вашему

<li><a id="login" href="#login" >Login</a></li> 

как это: document.getElementById("login") и установить новый текст, или вы можете воспользоваться услугой. Службы вы должны использовать для входа в систему и контроллер заголовка.

+0

Познакомившись с angularjs немного больше, я чувствую, что правильным решением является трансляция события входа в систему, поэтому представление становится отделенным от альтернативного контроллера. Изменение вида с другого контроллера, что я и делал с JQuery, заканчивается действительно беспорядочно. – Iannazzi

Смежные вопросы