2016-06-01 1 views
1

Поэтому у меня есть эта угловая директива определена:Как мне получить доступ и обновить ng-модель в контроллере?

angular.module('photoSynthesysApp') 
.directive('tagList', function(){ 
    return { 
    template: '<div class="tag-form"> <label> LABELS </label>'+ 

'<button class="btn-xsmall" ng-click="clicked = !clicked">+</button>' + 
'<div ng-show="clicked">'+ 
    '<input type="text" ng-model="newTag">  '+ 
    '<button ng-click="vm.addTag()"> Add </button>' + 
    '</div>'+ 
'<ul>'+ 
    '<div ng-repeat="tag in vm.tagListFromDatabase">' + 
    '<li>{{tag}}</li>' + '</div>'+ 
'</ul>'+ 
'</div>', 

controller: taggerController, 
controllerAs: "vm", 
restrict: "E" 
    } 
}); 

function taggerController() { 
    this.tagListFromDatabase = ["Bridges","Arches","Roads","Towers"]; 
    this.clicked="false"; 
    this.addTag = function(){ 
    this.tagListFromDatabase.push(this.newTag); 
    console.log(this.newTag); 
    }; 
} 

console.log дает мне неопределен, ничего не печатает. Я не понимаю, почему это не должно.

Кроме того, я использую шаблон как это, потому что я не мог понять, как сделать templateUrl, но я могу понять, что позже я думаю.

ответ

2

Вы пытаетесь получить доступ к объекту newTag, связанному с контроллером (vm), однако в шаблоне вы связываете ngModel с объектом области, а не с контроллером.

Правильный код будет:

<input type="text" ng-model="vm.newTag"> 

Примечание, vm.newTag связывает модель с контроллером, в то время как в одиночку newTag связывается с областью.

+1

Большое вам спасибо :) Это было очень полезно. – McFiddlyWiddly