2015-06-17 3 views
0

Я пытаюсь получить значение элемента div с помощью ng-click, но на него приходит предупреждение undefined. мой HTML являетсяУгловой js get div element issue

<div ng-model='myName'>this is my name</div> 
<br/> 
<input type="button" value="Show Name" ng-click="showName()"/> 

скрипт

$scope.showName = function(){ 
     var nameOne = $scope.myName; 
     alert(nameOne); 
    } 

Как решить эту проблему. Спасибо.

+0

Вы не можете использовать ng-model с элементом div: https://docs.angularjs.org/api/ng/directive/ngModel – Fals

+0

Хорошо спасибо. то как получить элемент div, если я использую '

this is my name
'. В jquery это просто '$ ('. MyName'). Text()'. –

+0

Вы никогда не должны использовать jquery внутри своего контроллера. Если вам нужна логика, связанная с представлением, создайте директиву. – Fals

ответ

0
<div>{{myName}}</div> 
<br/> 
<input type="button" value="Show Name" ng-click="showName()"/> 

скрипт

$scope.showName = function(){ 
     var nameOne = $scope.myName; 
     alert(nameOne); 
    } 
0

На самом деле нг-модель должна быть использование на входах.

<input type="text" ng-model="myName"> 

Это создаст $ scope.myName var и привяжет его к входному контенту.

Если вы intitialize в Myname в вашем JavaScript и хотите, чтобы она будет отображаться в этом Div вы должны использовать этот синтаксис:

JS

$scope.myName = "Ben"; 

HTML

<div>This is my name : {{myName}}</div> 

В обоих случаях ваш щелчок на кнопке не будет отображаться undefined, если вы не инициализировали его до щелчка (на втором примере).

Надеюсь, это помогло.

директива
2

ngModel не может использоваться с обычной DIV (если элемент не является пользовательской формой управления), см https://docs.angularjs.org/api/ng/directive/ngModel

<div ng-init="myName = 'this is my name'">{{ myName }}</div> 
<br/> 
<input type="button" value="Show Name" ng-click="showName()"/> 

Plunker here

Edit: с помощью ngInit вне ngRepeat считающийся bad practice, инициализировать объем vars в контроллере

$scope.myName = 'this is my name'; 
$scope.showName = function() { 
    alert($scope.myName); 
} 
+0

@downvoter, объясните, пожалуйста, – sbedulin

+0

ngModel может использоваться в любом элементе, также ngInit не должен использоваться для инициализации переменных области при нормальных обстоятельствах, для чего предназначен контроллер. – Wawy

+0

@Wawy "директива ngModel связывает вход, select, textarea (или пользовательский контроль формы) с свойством в области с использованием", поэтому он может использоваться, но ничего не будет делать.ngInit был показан для примера, но я согласился бы с вами, что myName должно быть инициализировано int контроллером. – sbedulin