angularjs观看单选按钮进行更改仅在第一次选择时工作

时间:2015-05-17 07:00:35

标签: javascript angularjs angularjs-directive

所以我有一个单选按钮列表,我试图用指令中的$ watch来观察选择的变化。我只能在第一次选择这些元素时触发手表。

我的HTML:

return {
    restrict: "A",
    scope: {
        selectedKey: '='
    },
    link: function(scope, elem, attrs) {
        scope.$watch('selectedKey', function(newValue, oldValue, scope) {
            alert('triggered')
        });
    }
}

我的指令回归:

{{1}}

我做错了什么?我尝试用"值"只是但是手表不会被触发。

提前谢谢

1 个答案:

答案 0 :(得分:0)

您需要了解ngRepeat为每个迭代项创建一个新范围。这意味着value对于每个单选按钮都是个体的。结果,每个无线电输入只触发一次监视表达式,之后它永远不会改变。

您需要做的是使用包含所选无线电值的父范围模型。您可以通过在控制器中声明模型来实现此目的,例如:

$scope.radio = {value: null};

并将此模型用于每个单选按钮。此外,我删除了多余的selected-key属性,您不需要它,因为您已经有一个指向同一radio.value的ng-model。

指令的全部内容如下:

app.directive('isValid', function() {
    return {
        restrict: "A",
        scope: {
            selectedKey: '=ngModel'
        },
        link: function(scope, elem, attrs) {
            scope.$watch('selectedKey', function(newValue, oldValue, scope) {
                console.log('triggered')
            });
        }
    };
});

演示: http://plnkr.co/edit/K8HJo8c81dFRKxZ2oyus?p=preview