У меня есть простое текстовое поле и кнопка, и всякий раз, когда пользователь нажимает кнопку, предупреждение показывает текст текстового поля, но я хочу сделать это таким образом (я знаю, что есть намного лучшие способы, но Сначала я хочу понять, почему этот способ не работает):Невозможно правильно присвоить область видимости
var app = angular.module('app', []);
app.factory('Service', function() {
var service = {
add: add
};
return service;
function add($scope) {
alert($scope.user.username);
}
});
app.controller('table', function(Service,$scope) {
//get the return data from getData funtion in factory
this.add = Service.add($scope);
});
Как вы можете видеть, что я отправить сферу на завод, и я определить user.username следующим образом:
<button class="btn btn-primary" ng-click="t.add(user.userName)">
Но когда я запустить это ничего не может кто-нибудь сказать мне, что не так с этим кодом?
<body ng-app="app">
<form>
<div class="row commonRow" ng-controller="table as t">
<div class="col-xs-1 text-right">item:</div>
<div class="col-lg-6 text-right">
<input id="txt" type="text" style="width: 100%;"
ng-model="user.userName">
</div>
<div class="col-xs-2">
<button class="btn btn-primary" ng-click="t.add(user.userName)">
click me</button>
</div>
</div>
</form>
также ссылка plnk выглядит следующим образом:
вы смешиваете проблемы здесь; вы пытаетесь передать переменную в службу через '$ scope', но вы пытаетесь вызвать эту услугу с помощью альтернативного синтаксиса Controller As. Если вы проверите свой код, вы увидите, что 'user.userName' не определено, потому что' user' не существует в '$ scope'. как только это будет разрешено, вы также увидите, что ваша функция не срабатывает. – Claies
Поблагодарите u @Claies, можете ли вы лидировать plnkr рабочей версии этого кода? –
@Claies также в этой строке Я различаю переменную в области: \t –