Angularjs 设置检查的 radio 不工作

标签 angularjs angularjs-ng-change

我有 3 个单选按钮:

            <label ng-repeat="mode in opMode.groupMode" class="radio-inline" title="{{mode.title}}">
                <input id="rd{{mode.id}}" type="radio" class="panel-load-radio" ng-model="opdtMode.groupMode"
                       name="inlineRadioOptions" value="{{mode.id}}" 
                       ng-change="changeOpdtMode(mode.id, '{{opdtMode.groupMode}}')">
                {{mode.name}}
            </label>

这是 Angularjs 代码:

$scope.opMode = { groupMode: [
   { name: "ModuleType", title: "Load processes by Module type", id: "ModuleType", isDefault: false },
   { name: "OpGroup", title: "Load processes by Operation group", id: "OpGroup", isDefault: true },
   { name: "MachineType", title: "Load processes by Machine type", id: "MachineType", isDefault: false  }
]};

如果isChange = true,则显示确认mbox。如果用户单击“取消”,请设置 oldValue 并检查之前的单选按钮。我写了这个。但是它没有按预期工作:

$scope.changeOpdtMode = function (newValue, oldValue) {
    if(isChange){
        const msg = getMsgById(29, msgLostData);
        const r = confirm(msg.value);
        if (r === true) {
            const lang = $scope.layoutLang.selectedLang;
            loadLayout(null, lang, newValue);
            window.isChange = false;
        } else {
            $scope.opdtMode.groupMode = oldValue;
        }
    }else{
        const lang = $scope.layoutLang.selectedLang;
        loadLayout(null, lang, newValue);
    }     
}

最佳答案

经过2个小时的研究: 我在这里发布我的答案,因为每个人都可能会看到同样的问题。

<label ng-repeat="mode in opMode" class="radio-inline" title="{{mode.title}}">
    <input type="radio" class="panel-load-radio" ng-value="mode.id"
           ng-model="$parent.opdtMode" ng-change="changeOpdtMode(mode.id, '{{opdtMode}}')">
    {{mode.name}}
</label>

需要删除 name="inlineRadioOptions" 并将 $parent 添加到模型中。

$scope.opdtMode = "OpGroup";
$scope.opMode = [{ name: "ModuleType", title: "Load processes by Module type", id: "ModuleType" },
   { name: "OpGroup", title: "Load processes by Operation group", id: "OpGroup" },
   { name: "MachineType", title: "Load processes by Machine type", id: "MachineType" }];

$scope.changeOpdtMode = function (newValue, oldValue) {
    if(isChange){
        const msg = getMsgById(29, msgLostData);
        const r = confirm(msg.value);
        if (r === true) {
            const lang = $scope.layoutLang.selectedLang;
            loadLayout(null, lang, newValue);
            window.isChange = false;
        } else {
            $scope.opdtMode = oldValue;
        }
    }else{
        const lang = $scope.layoutLang.selectedLang;
        loadLayout(null, lang, newValue);
    }     
}

关于Angularjs 设置检查的 radio 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49505523/

相关文章:

javascript - AngularJS Controller 中的内容未放置在页面上

javascript - Angular $resource.save 到 json 文件不起作用

javascript - Angular Directive 从模板 url 更新 View

angularjs - TR 元素通过 ng-click 触发复选框,但复选框上的 ng-change 不会触发

AngularJS:当 ng-click 上的值更改时,ng-change 不起作用

angularjs - 为选择选项组提供样式

javascript - Ionic bar-header 与 ion-content 重叠

AngularJS在离开输入字段时将值发送到数据库

javascript - ng-change 没有在复选框上被调用

angularjs - ng-click 后如何切换字段必需属性?