2014-11-01 99 views
0

我正在编写一个AngularJS应用程序,并与引导程序的js结合运行时遇到问题。 如果我想让下面的按钮按照他们应该的方式操作(点击时添加'active'类并且是独占的),那么我需要bootstrap的JS。AngularJS使用引导程序的JS

<div class="btn-group" data-toggle="buttons"> 
    <label class="btn btn-primary"> 
     <input type="radio" value="one" ng-model="myData[$index].number"> one 
    </label>  
    <label class="btn btn-primary"> 
     <input type="radio" value="two" ng-model="myData[$index].number"> two                
    </label>  
</div> 

的问题是,当我用引导的JS,NG-模式似乎停止工作,并没有数据在我的变量中。

但是,当我删除引导程序的JS时,ng模型按预期工作,但按钮不按照他们应该的。

我试着用angular's ui bootstrap JS代替bootstrap.js,但结果相同。我可能只是误解了使用bootstrap的JS?

This是按钮的预期行为。当我使用angularJS这不起作用。 不幸的是引导的JS需要的jQuery ...

任何帮助表示赞赏,

感谢

回答

0

您应该使用引导程序的按钮组件的角度版本。我推荐这些来自UI BootstrapAngularStrap项目。

+0

我也使用了UI引导程序,但无法使其工作。此外,你的第一个链接到404。我可能会尝试AngularStrap然后,将回到你 – trainoasis 2014-11-02 08:28:07

+0

我用AngularStrap和它的工作! – trainoasis 2014-11-02 16:21:28

+0

我很高兴能帮上忙。如果这完全解决了您的问题,请将答案标记为已接受。另外,我编辑了404链接。 – lukaszfiszer 2014-11-02 21:22:41

1

我以前也遇到过。你需要做的是使用一个配方,它适合存储你的模型数据,并在你的示波器中相应地绑定东西......无论是指令还是控制器。

然后在你的标记中,如果你不是已经在控制器或指令的范围内原生地使用ng-bind绑定的东西。

<!-- content is inside of 'myCtrl' scope --> 
    <div class="btn-group" data-toggle="buttons" ng-bind="Example.radioGroup"> 
     <label class="btn btn-primary"> 
      <input type="radio" value="one" ng-model="radioGroup[$index].number"> one 
     </label>  
     <label class="btn btn-primary"> 
      <input type="radio" value="two" ng-model="radioGroup[$index].number"> two                
     </label>  
    </div> 

确保将您的工厂注入您的范围。如果你想使用bootstrapAngular的指令方式,使用UI Bootstrap

myApp.factory('radioFactory', function(){ 
    return { 
     radioGroup: { 
      number:["one","two"] 
     } 
    } 
}) 

myApp.controller ('myCtrl', function($scope,radioFactory){ 
    $ scope.Example = radioFactory; 
}) 
+0

目前我没有绑定问题,虽然这是一个很好的例子,我可能会在其他情况下使用它。主要问题是使按钮在点击时保持“活动”。 (或者你有没有给出解决方案,当我有自举工作和绑定停止?) – trainoasis 2014-11-02 08:31:04

+0

哎呀,我埋头了。我发现的问题是使用ng模型。当我使用ng-bind代替(这需要重新连线一些东西)时,twitter引导按钮状态再次按预期工作。作为一个附带的奖励,这是什么导致我学习如何真正建模我的角应用程序,因为这种数据不应该在大多数构建好的应用程序中的控制器中。 – 2014-11-02 14:49:40

2

:这里有一个这样的工厂的一个例子。我预测,你想在点击按钮时调用一些function?尽量不要用Bootstrap的方式,用Angular的方式。那是ng-click。例如,在你的HTML代码:

<label class="btn btn-primary"> 
    <input type="radio" value="one" ng-model="myData[$index].number" ng-click="call(myData[$index].number)"> one 
</label> 

而且你controller的范围应该是某种:

.controller('myCtrl', function ($scope) { 
    $scope.myData = [*your array here*]; 
    $scope.call = function(param){ 
    console.log(param); //your 'myData' index should be printed in console, for example 
    }; 
}) 

而且,用自己的方式创建输入列表可以更有效的,如果使用ng-repeat ,就像:

<!-- content is inside of 'myCtrl' scope --> 
<div class="btn-group" data-toggle="buttons" ng-bind="Example.radioGroup"> 
    <label class="btn btn-primary" ng-repeat="n in radioGroup"> 
     <input type="radio" value="{{n.number}}" ng-model="n.number"> {{n.text}} 
    </label> 
</div> 

假设,如果你的模型有“数”和“文本”属性,有什么存在于你的radioGroup模型SH更换在前端收集数据。但是,如果您从不使用ng-repeat并且现在不使用它,那么稍后可以对其进行增强。

+0

谢谢你的回复。我一直使用ng-repeat,我的例子是大多数真实数据都被删除了。我使用ui的引导程序,但是如何为独占行为的组中的每个点击按钮完成“活动”类?我以为bootstrap会处理这个(这就是我使用JS的原因)。使用$(this)在jQuery中专门为每个按钮设置“活动”会很容易,但在这里我不确定。 – trainoasis 2014-11-02 08:26:05

+0

你想在点击某个元素时设置“active”类吗?我有一些方法,对你的情况来说情况不同,但它是可以实现的。检查http://stackoverflow.com/a/26499985/2793961 它使用'ng-class'而不是'Bootstrap'的方法。问我是否不够清楚。 – 2014-11-02 10:00:06

+0

我的问题目的有点不同。感谢您的参与,请检查编辑 – trainoasis 2014-11-02 16:20:53