如何在AngularJs

时间:2017-06-07 21:27:03

标签: javascript angularjs

请参阅以下jsfiddle。我在这里举了一个简单的例子来解释我想要实现的目标。

https://jsfiddle.net/nz9h6aje/1/

html页面:

<div ng-app="testApp" ng-controller="testCtrl">
1- <md-input-container>
<label>Question</label>
<input ng-model="models.Question1">
</md-input-container>
2- <md-input-container>
<label>Question</label>
<input ng-model="models.Question2">
</md-input-container>
<md-select  placeholder="Dependency" ng-model="models.Denpendency" md-on-open="getQuestionSet()" style="min-width: 300px;" multiple>
<md-option ng-value="setQuestion" ng-repeat="setQuestion in setQuestions">{{setQuestion}}</md-option>
</md-select>
</div>

js file:

angular.module('testApp', ['ngAnimate',
'ngAria',
'ngMaterial']).controller('testCtrl',function($scope){
$scope.models={
Question1:"",
Question2:"",
Dependency:[]           
}

$scope.getQuestionSet = function() {
  $scope.setQuestions = [];
  var tmpQuestion = 1 + " - " +$scope.models.Question1;
    $scope.setQuestions.push(tmpQuestion);
    tmpQuestion = 2 + " - " +$scope.models.Question2;
    $scope.setQuestions.push(tmpQuestion);
};

 $scope.$watch('models', function (newVal, oldVal) {
  if (newVal.Question1 !== oldVal.Question1) {
        var tmpQuestion = 1 + " - " +$scope.models.Question1;
      $scope.models.Dependency[0] = tmpQuestion;
  }
  if (newVal.Question2 !== oldVal.Question2) {
        var tmpQuestion = 2 + " - " +$scope.models.Question2;
      $scope.models.Dependency[1] = tmpQuestion;
  }
}, true);

});

当问题发生变化时,所选多个框的值将会更改。我有一个模型models.Dependency存储这个多选框的选定值。当两个问题发生变化时,存储在models.Dependency中的选定值也会发生变化。我的代码现在可以更改模型。问题发生变化时的依赖关系。但所选框的显示不会改变。我该怎么做才能刷新多个选中的框以反映models.Dependency中的新数据。

例如,两个问题是1-问题1,2-问题2.然后,当我单击多个选择框时,我将看到两个选项:1 - 问题1,2-问题2.当我更改问题时,选项也会改变。 如果我选择了这两个问题,则多重选择框将显示为“1-Question 1,2-Question 2”。如果我将问题1的值更改为“新问题1”。多重选择的显示保持不变。但是如果单击它,您将看到选项已经更改。未选择更改的选项。这是不正确的。我希望选中已更改的选项,此多选框的显示也会更改为“1-New Question 1,2-Question 2”。

我希望我能清楚地解释我的要求。 谢谢。

1 个答案:

答案 0 :(得分:0)

看看:https://jsfiddle.net/u2nvj4fs/2/

一些事情:

  1. 您的ng-model md-select有拼写错误(拒绝而非依赖)
  2. 每次打开下拉列表时,您都会覆盖整个集合列表,因此它会覆盖项目并将其从列表中删除。
  3. 这&#34;或多或少&#34;做你想要的。它应该让你朝着正确的方向前进。我很乐意根据需要详细说明