【问题标题】:AngularJS - Scope propertyAngularJS - 范围属性
【发布时间】:2014-09-29 05:03:40
【问题描述】:

我已将此 HTML 保存在一个文件中。

HTML:

<!-- radio button 1 -->
<input type="radio" name="radio1" id="radio-group1" ng-model="radio1" value="group1">
<input type="radio" name="radio1" id="radio-group2" ng-model="radio1" value="group2">

<!-- radio button 2 -->
<input type="radio" name="radio2" id="radio-group3" ng-model="radio2" value="group3">
<input type="radio" name="radio2" id="radio-group4" ng-model="radio2" value="group4">
<input type="radio" name="radio2" id="radio-group5" ng-model="radio2" value="group5">

我已经创建了一个指令。

Javascript:

App.directive('radioControls', [function() {
    return {    
        restrict: 'A',
        templateUrl: 'radio-controls-template.html',
        controller: ['$scope', function($scope) {
            $scope.radio1= 'group1';
            $scope.panelStyle = 'group4';
        }]
    }

}])

这是我使用属性 radio-controls 的 HTML。

<div class="radio-buttons-div" radio-controls>      
</div>    
<span>{{ radio1 }}</span>
<span>{{ radio2 }}</span>

它工作正常。但是,如果我复制整个 HTML 并且单击任何可用的单选按钮。所有跨度都会更新,其中车把内的radio1radio2

我知道我们需要在范围上发挥作用。但我不明白它是什么、如何工作或如何使其工作。

Plunker 以便更好地理解。

【问题讨论】:

  • 了解隔离作用域
  • 我正在查看 angulars 文档。但对我来说还不是很清楚。你能帮我解决一下吗?

标签: javascript html angularjs radiobuttonlist


【解决方案1】:

你必须在你的指令中定义一个独立的范围,才能不改变全局范围。

在范围内使用两个不同的对象:

<div class="controller">
<p>
  <form>
    <radio-controls group1="d1.group1" group2="d1.group2"></radio-controls>
  </form>  
  <br />
  <span>Group 1 Value : {{ d1.group1 }}</span>
  <br>
  <span>Group 2 Value : {{ d1.group2 }}</span>
</p>
<p>
  <form>
    <radio-controls group1="d2.group1" group2="d2.group2"></radio-controls>
  </form>
  <br />
  <span>Group 1 Value : {{ d2.group1 }}</span>
  <br>
  <span>Group 2 Value : {{ d2.group2 }}</span>
</p>
</div>

在指令中定义一个独立的作用域:

App.directive('radioControls', [function() {

return {

    restrict: 'E',
    scope: {
      group1: '=',
      group2: '='
    },
    templateUrl: 'radio-controls-template.html',
    controller: ['$scope', function($scope) {
        $scope.radio1= 'group1';
        $scope.panelStyle = 'group4';
    }]
}

}])

并在模板中使用指令作用域:

<!-- radio button 1 -->
<input type="radio" name="name" id="radio-group1" ng-model="group1" value="radio1">Radio 1
<input type="radio" name="name" id="radio-group2" ng-model="group1" value="radio2">Radio 2


<!-- radio button 2 -->
<input type="radio" name="name2" id="radio-group3" ng-model="group2" value="radio3"> Radio 3
<input type="radio" name="name2" id="radio-group4" ng-model="group2" value="radio4"> Radio 4
<input type="radio" name="name2" id="radio-group5" ng-model="group2" value="radio5"> Radio 5

Plunker:http://plnkr.co/edit/yNVDMe?p=preview

【讨论】:

  • 我有大约 n 个要创建的组。我将无法通过添加d1d2 来重复自己,使其在所有组中都是独一无二的。我在孤立的范围内进行了一些研究。并且学到了一些知识,但这些知识不足以让我让它充满活力。
  • 但随后使用数组和 ng-repeat 代替。问题中没有具体说明。
  • 我的模板是一个 html 文件。我如何在其中使用ng-repeat
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多