Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 单击uib按钮单选元素时,在更新模型之前触发ng change指令_Angularjs_Angular Ui Bootstrap - Fatal编程技术网

Angularjs 单击uib按钮单选元素时,在更新模型之前触发ng change指令

Angularjs 单击uib按钮单选元素时,在更新模型之前触发ng change指令,angularjs,angular-ui-bootstrap,Angularjs,Angular Ui Bootstrap,这是一个plnkr: 我使用uib按钮单选元素在ng重复上切换有源滤波器 <div ng-controller="ButtonsCtrl as $ctrl"> <h4>Radio</h4> <pre>Model: {{$ctrl.radioModel}}</pre> <div class="btn-group"> <label class="btn btn-primary" ng

这是一个plnkr:

我使用uib按钮单选元素在ng重复上切换有源滤波器

  <div ng-controller="ButtonsCtrl as $ctrl">
    <h4>Radio</h4>
    <pre>Model: {{$ctrl.radioModel}}</pre>
    <div class="btn-group">
      <label class="btn btn-primary" ng-change="$ctrl.do()" ng-model="$ctrl.radioModel" uib-btn-radio="'Left'">Left</label>
      <label class="btn btn-primary" ng-change="$ctrl.do()" ng-model="$ctrl.radioModel" uib-btn-radio="'Middle'">Middle</label>
      <label class="btn btn-primary" ng-change="$ctrl.do()" ng-model="$ctrl.radioModel" uib-btn-radio="'Right'">Right</label>
    </div>

    <p ng-repeat="item in $ctrl.filtered = ($ctrl.collection | filter: { Value: $ctrl.radioModel } )">{{item | json}}</p>

    <p>First filtered item: {{$ctrl.active | json}}</p>

当选定的筛选器发生更改,并且随后更新集合时,我希望选择筛选集合中的第一项。但是,在筛选器更新集合之前,似乎启动了ng change/ng click函数。

您可以在JavaScript中而不是在标记中应用筛选逻辑

在HTML中,将ng repeat表达式更改为:

angular.module('ui.bootstrap.demo').controller('ButtonsCtrl', function ($scope, $filter) {
初始化筛选的数组:

ctrl.do = function() {
    ctrl.filtered = $filter('filter')(ctrl.collection, { Value: ctrl.radioModel });
    ctrl.active = ctrl.filtered[0];
}
并在do change处理程序中执行筛选:


我的实际代码比我提供的示例要复杂一些,需要链接过滤器,但这使我走上了正确的道路,同时
angular.module('ui.bootstrap.demo').controller('ButtonsCtrl', function ($scope, $filter) {
ctrl.filtered = [];
ctrl.do = function() {
    ctrl.filtered = $filter('filter')(ctrl.collection, { Value: ctrl.radioModel });
    ctrl.active = ctrl.filtered[0];
}