2016-03-14 6 views
1

Существует мой HTML-код:

<div ng-if="user.type == 'none'"> <button ng-click="selectUserType('user')"></button> </div> 
<div ng-if="user.type !== 'none'"> //here goes input etc </div> 

Существует мой сценарий:

$scope.user = {type: 'none'}; 
$scope.selectUserType = function(type) { 
$location.path('/signup/'+type); 
$scope.user.type = type; 
}; 

Проблема заключается в том, что после первого щелчка в консоли я вижу, что $ scope.user получает «пользовательское» значение, затем прямо в момент обращается к «none», но местоположение меняет то, что мне нужно. $ scope.user снова получает значение после второго щелчка и скрывает полезный блок и показывает, что нужно.

Как я могу это сделать, по-другому? Мне нужно сделать все те, одним щелчком мыши

это работает, когда я удалить $location.path('/signup/'+type), но мне еще нужно изменить location.path когда user.type изменяется

Извините за мой английский, если вы видите некоторые грамматики ошибки или что-то еще. это не мой родной, спасибо.

+0

Вы уверены, что вам нужно '' тег:

+0

Вы пытались установить '$ scope.user.type' перед изменением' $ location.path'? Также тег кнопки не закрывается. Незнакомые вещи вызвали постороннее поведение;) '

+0

Извините, были ошибки, теперь это правильно выглядит – scDisorder

ответ

0

на пути, Дмитрий Лоскутов ответил мне, я использовал это: просто проверить location.path в начале контроллера, затем установите тип:

var locPath = $location.path(); 
    if (locPath == '/signup') { 
     $scope.user = {type: 'none'}; 
    } else if (locPath == '/signup/user') { 
     $scope.user = {type: 'user'}; 
    } 

    $scope.selectUserType = function(type) { 
     $location.path('/signup/' + type); 
     $scope.user.type = type; 
    }; 

надежду, что помогает кому-то, потому что я» вы потеряли около 4 часов, чтобы получить это простое решение> _ <

0

Попробуйте этот код (это не самый лучший способ):

var $user = {type: 'none'}; // define OUTSIDE of controller(or link function) 

код внутри контроллера (или ссылку функции)

$scope.user = $user; 
$scope.selectUserType = function(type) { 
    $location.path('/signup/' + type); 
    $user.type = type; 
    $scope.user = angular.extend({}, $user); 
}; 

Я предполагаю, что ваш контроллер INIT дважды в вашем случае, так попробуйте определить переменную $ user вне контроллера, например, в глобальной области (также вы можете попытаться определить ее в $ rootScope), поэтому, когда контроллер повторно инициализирует, он не изменяет переменную $ user.

+0

, по-прежнему ничего не меняется :(спасибо – scDisorder

+0

Пробовал ли вы пропустить '$ Location.path ('/ регистрация /' + тип);'? Может быть, он повторно инициализирует ваш контроллер (или функцию связи) и устанавливает '$ scope.user = {type: 'none'};' снова? –

+0

Он работает, когда я удаляю '$ location.path ('/ signup /' + type);' обычно, но мне все равно нужно изменить location.path – scDisorder

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