2014-03-31 31 views
2

在HTML我有这行代码:Angularjs NG-模型是未定义

<input type="text" class="training-comment" placeholder="Enter comment" ng-model="content" data-ui-keypress="{13:'keypressCallback($event)'}"> 

而且在控制器这样的:

$scope.keypressCallback = function ($event) { 
    console.log("comment is", $scope.content); 
    $event.preventDefault(); 
}; 

当我在输入输入一些文字,并在控制台按回车我看到$ scope.content是未定义的。

这是为什么?

+0

你可以在html头或你的页面的任何地方使用ng-app attr,在这里你可以运行angularjs – wpdaniel

+0

我使用它,这只是代码的一部分,我有几个ng- keypressCallback不会被解雇,如果错误是由于那个 – hyperN

+1

你可以在JSFiddle或plunker中提供一个最小的例子吗? –

回答

3

我放在一起使用Angular UI的Plunker example here,基本上复制问题的代码。然后我把这个例子,并增加了NG-重复来证明我见过的最常见的问题之一:范围发出

<div ng-repeat="x in collections"> 
    <input type="text" class="training-comment" placeholder="Enter comment" 
ng-model="content" data-ui-keypress="{13:'keypressCallback($event)'}" /> 
    <br /><br /> 
</div> 

你可以找到这个updated plunker example here。基本上,无论何时使用ng-repeat或任何其他用于创建新范围的指令,模型都存在于该范围中 - 而不是父级或根范围。这意味着你的代码可能正在工作,但它打印出错误范围的值!有关示波器的更多信息,请参见angular documentation here

要使用plunker演示,键入第一个输入并按enter键,模型将被更新。但是,如果您键入其他两个框中的任何一个,模型将不会更新,或者将会是undefined(如果您从未输入过第一个框)。

即使这不是确切的问题,但希望它仍然有帮助。祝你好运!

+0

谢谢,这可能是由于,因为我已经把简化plunker版本我的代码和简化版本的作品,http://plnkr.co/edit/Wfsl7kscIWu7i5JXjiZy?p=preview – hyperN

+0

是的,问题与ng-repeat一样,我通过将'ng-model =“content”'改为' ng-model =“$ parent.content”' – hyperN

+0

ng-model =“$ parent.content”works .. thanks! – Saurabh