2014-12-18 2 views
2

Я пытаюсь изменить переменную внутри $ scope внутри функции контроллера, и действие аффектации работает, но не применяется в представлении.AngularJS - Область применения не применяется в представлении в функции контроллера

app.controller('LoginCtrl', ['$scope', '$http', function ($scope, $http) { 

    $scope.test = "test"; 

    $scope.logIn = function() { 
     // This changes the value to test2, but does not applies it to the view. 
     $scope.test = "test2"; 
    }; 

}]); 

В login.html:

DEBUG: {{ test }} 

И routeProvider:

$routeProvider 
    .when('/', { 
     templateUrl: '/views/login.html', 
     controller: 'LoginCtrl' 
    }) 

Что-то я пропустить документацию?

Спасибо!

+0

Можете ли вы предоставить Plunker демо-версию проблемы. Он работает для меня: http://plnkr.co/edit/xbZWsE2i422BrDLDYXI3?p=preview –

+0

Пожалуйста, по крайней мере, включите полный HTML. Невозможно сказать, правильно ли вы назначили 'ng-controller' или' ng-app'. – Aweary

+0

Ваш код не показывает, что функция 'logIn' фактически вызывается для изменения значения в области. – Enzey

ответ

0

Так что я думаю, что это проблема ссылки или наследования, которая известна с помощью примитивов, см. Это сообщение https://github.com/angular/angular.js/wiki/Understanding-Scopes. Попробуйте этот же код, но поставил тест внутри объекта, так как:

$scope.viewModel = {}; 
$scope.viewModel.test = 'Test'; 
+0

Это не исправляет мою проблему. В любом случае, спасибо ! –

3

Это происходит потому, что угловой не знает об изменениях, сделанных области видимости функции, которые я Логин думаю, вызывается асинхронно в вашем случае. После вызова Логин() асинхронно, сила изменения области действия с помощью

$scope.$apply() 
+0

Куда поместить его? Причина в этом случае означает, что я должен применять к нему все ответы HTTP? –

0

я обнаружил, что я поставил нг-контроллер = «» в HTML элемент, который вызывает функцию Логин().

На самом деле, я дважды вызывал его и заставляю обновить представление.

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