【问题标题】:Setting $scope variables AngularJS设置 $scope 变量 AngularJS
【发布时间】:2014-04-15 19:55:50
【问题描述】:

所以我在事件发生后向 $scope 添加变量时遇到问题。 这是选择框的 HTML。基本上当它改变时,我需要改变范围。

Index.html

<select ng-controller="ClientCtrl" ng-model="name" 
ng-options="v.name for (k, v) in client" ng-change="selectChange(name)">
</select>

<h2>{{cName}}</h2>
<p>Age: {{cAge}}</p>
<p>Notes: {{cNotes}}</p>

Controller.js

$scope.selectChange = function(name){
    $scope.cName = name.name;
    $scope.cAge = name.age;
    $scope.cNotes = name.notes;
  };

我已经尝试了一些方法来设置这些变量。显然是上面这个,然后是这个:

$scope.selectChange = function(name){
        $scope.cName = name.name;
        $scope.cAge = name.age;
        $scope.cNotes = name.notes;
        $scope.$apply();
  };

我仍然不太了解 apply,但我想我会尝试一下。任何帮助都会很棒,只需要一个指针来解释为什么这不起作用。

我可以将变量发布到 console.log(cName);但是当我有 {{cName}}

时它不会显示

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

您实际上不必在 ng-change 事件中传递名称,因为您实际上已经在作用域中拥有该名称。 changeEvent 可以直接使用 $scope.name 而不是作为参数传递。

ng-change="selectChange()"

js

$scope.selectChange = function(){
    $scope.cName = $scope.name.name;
    and so on.  
};

id 建议你给它一个比名字更好的名字,我猜是在谈论一个人,所以如果你把它叫做 Person.Name 等等会更容易阅读;)

你还需要将你的 print 包装在你现在拥有 name 的同一个控制器中,以使其工作,因为范围是为控制器创建的。

【讨论】:

  • 好吧,所以我应用了这个,它把事情搞定了!我绝对应该想到这一点,我正在关注我在其他地方找到的更改功能,但现在你说这样做更有意义。这是一个从事这项工作的人。谢谢! :D PLUNKER
【解决方案2】:

如果没有更多信息,它很难完全调试,但据我所知,我建议将整个 html 片段包装在控制器 ClientCtrl 中,否则 h2 和 p 标签将无法访问它创建的范围。

<div ng-controller="ClientCtrl">
  <select ng-model="name" ng-options="v.name for (k, v) in client" ng-change="selectChange(name)">
  </select>

  <h2>{{cName}}</h2>
  <p>Age: {{cAge}}</p>
  <p>Notes: {{cNotes}}</p>
</div>

希望这有助于发布更多信息或使用 plunker...

【讨论】:

  • 我在 ng-view 中有 h2 和 p's 和 ClientCtrl,但我绝对应该在我的问题中描述这一点。我按照您在 plunker 中说明的方式显示它,谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多