2015-10-05 4 views
0

есть проблема с Angular.js, которую я не могу исправить. Вот мой простой html:Angularjs - переменная не найдена

<html ng-app="myAngularapp"> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script> 
    <script src="myangular.js"></script> 
    </head> 
    <body> 
    <div ng-controller="myAngularCtrl"> 
<form ng-submit="addingName()"> 
     <input type="text" ng-model="myAngular.newname" size="30" 
       placeholder="add new todo here"> 
     <input class="btn-primary" type="submit" value="add"> 
     </form> 
</div> 
    </body> 
    </html> 

и myangular.js:

angular.module("myAngularapp",[]) 
    .controller("myAngularCtrl", function($scope){ 
     $scope.myNames = [ 
      {name:"aaa"}, 
      {name:"aaa"}, 
      {name:"aaa"} 
     ]; 

     $scope.addingName = function(){ 
      $scope.myNames.push({name:newname}); 
     } 
    }); 

При нажатии на кнопку отправки, я получил ошибку:

Error: Can't find variable: newname

Что, кажется, проблема?

+0

Hi, что такое ** мойAngular **. Вы хотите сказать, что это ваш контроллер? –

ответ

3

Вы никогда не объявлял newname, вместо того, чтобы это свойство на $scope

<input type="text" ng-model="myAngular.newname" size="30"> 

Может быть доступны $scope.myAngular.newname, не newname в контроллере.

$scope.myNames.push({name: $scope.myAngular.newname}); 

Это происходит потому, что угловые магазины переменных, которые могут быть доступны с помощью HTML в $scope. Это объект, доступ к которому возможен в контроллере, что делает его уникальным.

0

Вы можете получить доступ к myAngular.newname в контроллере:

$scope.myAngular.newname 

Или другой вариант, чтобы добавить аргумент addingName:

$scope.addingName = function(newname){//ur code}; 

Затем измените HTML:

ng-submit="addingName(myAngular.newname)" 
0

В вы html, вы привязываете свой ввод к модели под названием myAngular.newname Но когда вы добавляете это значение в свой массив myNames, вы используете переменную newname.

Вы можете изменить имя переменной в своем представлении или в своем контроллере. Это зависит от вас.

Один из вариантов, чтобы исправить вашу проблему является:

<input type="text" ng-model="myAngular.newname" size="30" 
       placeholder="add new todo here"> 
0

вы можете использовать

this.myAngular.newname 

для получения значения текстового поля после отправки формы

http://plnkr.co/edit/6P5LXuuTAfUfQS4RxmWG?p=preview

+0

Пожалуйста, разместите полный код здесь, на Stack Overflow, с объяснением причин и способов работы кода. Если вы вставляете ссылку, которая перестает работать в будущем, тогда ваш ответ будет потерян, также очень полезно не переходить на отдельную страницу. И только ответы на ложные ответы никогда не помогают никому - вы должны объяснить, как код, который вы дали, устраняет проблему. Благодаря! –

0

Как Лучшая практика: ViewModel должен быть четко определен.

Всегда используйте синтаксис Controller As и избегайте $ scope.

<form ng-submit="addingName()"> 
    <input type="text" ng-model="myAngular.newname" size="30" 
        placeholder="add new todo here"> 
    <input class="btn-primary" type="submit" value="add"> 
</form> 

Как вы используете myAngular.newname, она должна быть объявлена ​​на VM ($scope в вашем случае).и передать параметр NewName в функции addingName

Итак, ваши JS будет:

angular.module("myAngularapp",[]) 
    .controller("myAngularCtrl", function($scope){ 
     $scope.myNames = [ 
      {name:"aaa"}, 
      {name:"aaa"}, 
      {name:"aaa"} 
     ]; 

     //or you may use without myAngular 
     //$scope.newname = ""; 
     //in this case you will have to use: ng-model="newname" 
     //      instead of ng-model="myAngular.newname" 
     $scope.myAngular = { 
      newname: "" 
     }; 

     $scope.addingName = addName; 

     //you can use addName function even to add names from JS itself also 
     function addName(name){ 
      $scope.myNames.push({name}); 
     } 
    }); 

и вид был бы:

<form ng-submit="addingName(myAngular.newname)"> 
    <input type="text" ng-model="myAngular.newname" size="30" 
        placeholder="add new todo here"> 
    <input class="btn-primary" type="submit" value="add"> 
</form> 

PS: Я не могу добавить комментарии , поэтому перечислены все лучшие практики в качестве отдельного ответа.

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