Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs$范围未更新UI_Javascript_Angularjs - Fatal编程技术网

Javascript Angularjs$范围未更新UI

Javascript Angularjs$范围未更新UI,javascript,angularjs,Javascript,Angularjs,我对AngularJS是个新手,我在四处游荡,想看看我能做些什么。我有一个简单的表格: <div ng-controller="EditContactCtrl"> <div class="row-fluid" ng-repeat="email in contact.emails"> {{email.type}} - {{email.email_address}} </div> <form name="emailForm" ng-con

我对AngularJS是个新手,我在四处游荡,想看看我能做些什么。我有一个简单的表格:

<div ng-controller="EditContactCtrl">
  <div class="row-fluid" ng-repeat="email in contact.emails">
    {{email.type}} - {{email.email_address}}
  </div>
  <form name="emailForm" ng-controller="EditContactCtrl" ng-submit="addEmail()">
   <select class="span4" name="type">
     <option vlaue="Work">Work</option>
     <option vlaue="Personal">Personal</option>
     <option vlaue="Other">Other</option>
   </select>
   <input class="span6" type="text" name="email_address" placeholder="Email Address">
   <input type="submit" class="btn span2 pull-right" value="Add"/>
  </form>
</div>

当我运行这段代码时,一切都很顺利,我可以看到新的电子邮件地址被添加到联系人对象中的电子邮件列表中。但问题是,用户界面没有更新新的电子邮件地址。我希望它在上面吐出新地址,我在那里有
ng repeat=“email in contact.emails”

看起来您在自己内部声明了相同的控制器“EditContactCtrl”。可能是这个嵌套问题导致了您的问题。尝试删除
上的
ng控制器
,看看这是否解决了您的问题。

看起来您在其内部声明了相同的控制器“EditContactCtrl”。可能是这个嵌套问题导致了您的问题。尝试删除
上的
ng控制器
,看看这是否解决了您的问题。

将整个代码包装在一个div中,然后将控制器添加到该div中。。。事实已经如此。对不起,我也许应该多说一点!代码用ok包装,但表单本身也有它,这意味着您已经声明了两次。它可能会干扰你上面的传说。我正准备为此杀人。谢谢again@ashley,你能发表你的评论作为答案吗,这样这个问题就不会再出现在AngularJS的“未回答”列表中了?把整个代码包装在一个div中,然后将控制器添加到该div中。。。事实已经如此。对不起,我也许应该多说一点!代码用ok包装,但表单本身也有它,这意味着您已经声明了两次。它可能会干扰你上面的传说。我正准备为此杀人。谢谢again@ashley,您是否可以发布您的评论作为答案,以便此问题不再出现在AngularJS“unanswered”列表中?您是否可以在同一时间定义两次ng控制器(假设它们不会嵌套)?如果是,第一个ng控制器的ng单击是否会在第二个ng控制器中更新$scope?此答案刚刚解决了我与控制器as之间的一个问题,其中我的模型正在更新,但未反映在视图中。事实证明,我在指令中定义了控制器,但我忘记了,并且将控制器放在html中。真是个错误。浪费了几个小时的时间,但多亏了这个答案,我终于找到了原因。为了解决这个问题,我删除了controller的html declarion,只做了指令中的所有事情,controller:和controllerAs:如果不嵌套,您可以在同一个指令中定义两次ng控制器吗?如果是,第一个ng控制器的ng单击是否会在第二个ng控制器中更新$scope?此答案刚刚解决了我与控制器as之间的一个问题,其中我的模型正在更新,但未反映在视图中。事实证明,我在指令中定义了控制器,但我忘记了,并且将控制器放在html中。真是个错误。浪费了几个小时的时间,但多亏了这个答案,我终于找到了原因。为了解决这个问题,我删除了controller的html declarion,并使用controller:和controllerAs:
function EditContactCtrl($scope, Contacts, $routeParams){
  $scope.contact = {emails:[], contact_numbers: [], addresses: []};
  $scope.isNew = $routeParams.contactId == '';

  if(!$scope.isNew){
    $scope.contact = Contacts.get({contactId: $routeParams.contactId});
  }

  $scope.addEmail = function(){
    $scope.contact.emails.push({type:emailForm.type.value, email_address: emailForm.email_address.value});
    console.log($scope.contact.emails);
    emailForm.reset();
  }
}