Ответ 1
Подождите, пока переменная будет init.
$scope.$watch('pageTitle', function () {
console.log($scope.pageTitle);
});
У меня есть переменная, которую я устанавливаю в своем представлении с помощью ng-init
, которую я пытаюсь получить в моем контроллере. Когда я пытаюсь получить к нему доступ, я получаю undefined
.
Соответствующие фрагменты кода:
Мой взгляд:
<div ng-controller="MyCtrl">
<div ng-init="pageTitle = 'kittens'">
</div>
</div>
Мой контроллер:
var MyCtrl;
MyCtrl = function($scope) {
return console.log($scope.pageTitle);
};
Что мне здесь не хватает?
Подождите, пока переменная будет init.
$scope.$watch('pageTitle', function () {
console.log($scope.pageTitle);
});
Вы также можете воспользоваться тем, как JavaScript определяет функции и использует функцию для ng-init вместо $watch (jsfiddle).
<div ng-app>
<div ng-controller="MyCtrl" ng-init="pageTitleEquals('kittens')">
Page title is {{ pageTitle }}
</div>
</div>
Контроллер:
var MyCtrl = function($scope) {
$scope.pageTitleEquals = function(title) {
$scope.pageTitle = title;
}
};
Этот вопрос аналогичен: Как установить свойство scope с помощью ng-init?
контроллер создается до того, как переменная pageTitle добавляется к объекту $scope.
Поскольку вы выполняете "однократный init", как конструктор, я рекомендую вам отвязать часы после использования переменной:
var pageTitleWatch = $scope.$watch('pageTitle', function () {
console.log($scope.pageTitle);
// Now just unbind it after doing your logic
pageTitleWatch();
});