uib-btn-radio不使用$ scope但是使用“controller as”语法?

时间:2016-06-09 05:01:24

标签: javascript angularjs angular-ui-bootstrap

我正在尝试创建一个简单的btn-group,如此

<div class="btn-group">
    <label class="btn btn-primary" 
    ng-model="radioModel" 
    ng-repeat="playerClass in playerClasses" 
    ng-class="{{ playerClass.buttonClass }}" 
    uib-uncheckable='false' 
    uib-btn-radio="{{ playerClass }}">{{ playerClass.className }}</label>
</div>

在控制器中使用

$scope.playerClasses = cardFactory.getClasses();
$scope.radioModel = { className: 'value', buttonClass: 'value'};

但每当我点击其中一个按钮时,radioModel就不会改变,这会导致多个按钮处于活动状态

我用“控制器为”语法切换$ scope并解决了问题,但问题是我在整个项目中使用了$ scope语法而我不希望只有一个控制器将“控制器作为”而其他控制器则有范围。

我的问题是,有没有办法让uib-btn-radio使用$ scope而不是“controller as”?

2 个答案:

答案 0 :(得分:2)

如果您不想使用&#39;控制器作为&#39;然后在模型变量中有一个点

ng-model="data.radioModel"

这里有一个很好的解释(第2和第3项) https://www.toptal.com/angular-js/top-18-most-common-angularjs-developer-mistakes

答案 1 :(得分:1)

ng-repeat指令实例化的每个模板都会创建自己的子范围,并可以使用$parent访问ng-repeat周围的范围。所以快速解决方法是:

ng-model="$parent.radioModel"

工作代码:https://jsfiddle.net/Lzs2sr54/