2

我正在尝试使用 Angularjs 将复选框设置为 true。现在我正在使用 vanilla javascript 来操作 DOM 作弊,但我想用 Angularjs 以正确的方式来做这件事。

这是视图:

<div x-ng-repeat="addon in addons">
  <label for="{{addon.addoncode}}">
    <input type="checkbox"  
    name="{{addon.addoncode}}" 
    value="{{addon.addoncode}}"  
    id="{{addon.addoncode}}"  
    x-ng-model="addon.checked" 
    x-ng-click="checkAddonDependencies()"  >
   <span x-ng-bind-html="addon.addon_desc">{{addon.addon_desc}}</span> </label>
</div>

这是控制器的相关部分:

 if (document.getElementById(dep)) {
    document.getElementById(dep).checked=true;
     }

dep 值等于 addoncode 值,因此如果存在,我选中该框。这可以工作并选中该框,但是我如何使用范围来执行此操作?

我试过了:

x-ng-model="addon.addoncode" 

$scope.addon.dep = true;

但没有运气......任何帮助表示赞赏。谢谢。

4

3 回答 3

3

HTML

<div ng-repeat="addon in addons">
  <label for="{{addon.addoncode}}">
   <input type="checkbox"  
     name="{{addon.addoncode}}" 
     value="{{addon.addoncode}}"  
     id="{{addon.addoncode}}"  
     ng-model="addon.checked" 
     ng-click="checkAddonDependencies()"  >
  <span ng-bind-html="addon.addon_desc">{{addon.addon_desc}}</span> </label>
 </div>    

控制器

function countController( $scope, $timeout )
{
$scope.addons = [
   {
       checked: true
   },
    {
       checked: false
   }
];   
}

Fiddle

[编辑]

角度的要点是您无需担心更新 HTML。你只需要改变你的$scope.addons.

您可以看到您的代码如何与 Promise 一起工作,以及如何每 3 秒将项目添加到$scope.addons. delay我通过服务模拟了异步任务。

Fiddle 2

顺便说一句,我没有碰你的 HTML

于 2013-09-19T13:28:08.537 回答
0

您的对象addon仅存在于模板上的 ng-repeat 内。在控制器上你应该有类似的东西:

$scope.addons[0].isChecked = true;

因为插件是一个数组。请注意, isChecked 可以采用任何属性名称

然后在模板上使用:

<div x-ng-repeat="addon in addons">
  <label for="{{addon.addoncode}}">
    <input type="checkbox" x-ng-model="addon.isChecked" x-ng-click="checkAddonDependencies()"  >
   <span x-ng-bind-html="addon.addon_desc">{{addon.addon_desc}}</span> </label>
</div>
于 2013-09-19T13:26:16.510 回答
0

事实证明这是一件简单的事情。而不是使用复选框 id:

document.getElementById(dep).checked=true;

我只需要使用角度过滤器:

var x = filterFilter($scope.addons, {
    addoncode: dep
});                 

x[0].checked = true;
于 2013-09-24T15:16:50.107 回答