设置$ scope变量AngularJS

时间:2014-04-15 19:55:51

标签: javascript angularjs

所以我遇到在事件发生后向$ 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();
  };

我仍然不太明白申请,但我想我试一试。任何帮助都会很棒,只需要一个指针就可以解决为什么这样做不会起作用。

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

时,它就不会显示出来

2 个答案:

答案 0 :(得分:0)

没有更多的信息很难完全调试,但从我可以看到我建议将整个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 ......

答案 1 :(得分:0)

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

ng-change="selectChange()"

<强> JS

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

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

您还需要将您的打印件包装在您现在具有名称的同一控制器中,以使其工作,因为为控制器创建了范围。