我试图整合 JQuery.iCheck(复选框和放大镜按钮样式的插件).
我在这里提到几个建议,表示集成jQuery插件与Angular ngRepeat完全兼容的方法是使用指令.

所以我实施了一个指令:

webApp.directive('icheck',function($timeout,$parse) {
    return {
        link: function($scope,element,$attrs) {
            return $timeout(function() {
                var ngModelGetter,value;
                ngModelGetter = $parse($attrs['ngModel']);
                value = $parse($attrs['ngValue'])($scope);
                return $(element).iCheck({
                    checkBoxClass: 'icheckBox_minimal',radioClass: 'iradio_minimal-grey',checkBoxClass: 'icheckBox_minimal-grey',increaseArea: '20%'
                }).on('ifChanged',function(event) {
                        if ($(element).attr('type') === 'checkBox' && $attrs['ngModel']) {
                            $scope.$apply(function() {
                                return ngModelGetter.assign($scope,event.target.checked);
                            });
                        }
                        if ($(element).attr('type') === 'radio' && $attrs['ngModel']) {
                            return $scope.$apply(function() {
                                return ngModelGetter.assign($scope,value);
                            });
                        }
                    });
            });
        }
    };
});

此指令不能完全用于我的ngRepeat元素,并且不会更改
对象的属性投票.

My code – Git

我的代码:

var webApp = angular.module('webApp',[]);

//controllers
webApp.controller ('VotesCtrl',function ($scope,Votes) {
    $scope.Votes  = Votes;

    $scope.statuses = ["Approved","Pending","Trash","Spam"];
    $scope.selectedID = 1;
    $scope.expand = function(Vote) {
        console.log("show");
        $scope.Vote = Vote;

        $scope.selectedID = Vote.id;
    };

    $scope.change = function() {
        for(var i = 0; i < $scope.Votes.length; i++) {
            if($scope.Votes[i].cb) {
                $scope.Votes[i].status = $scope.Votes.status;
                $scope.Votes[i].cb = false;
            }
            $scope.show = false;
        }
    };

});

//services
webApp.factory('Votes',[function() {
    //temporary repository till integration with DB this will be translated into restful get query
    var Votes = [
        {
            id: '1',created: 1381583344653,updated: '222212',ratingID: '3',rate: 5,ip: '198.168.0.0',status: 'Pending',userIdentification:'IP-ADDRESS'
        },{
            id: '111',ratingID: '4',ip: '198.168.0.1',status: 'Spam',userIdentification:'FLASH-COOKIES'

        },{
            id: '2',created: 1382387322693,rate: 1,ip: '198.168.0.2',status: 'Approved',userIdentification:'HTTP-COOKIES'

        },{

            id: '4',ip: '198.168.0.3',userIdentification:'IP-ADDRESS'
        }
    ];
    return Votes;
}]);


webApp.directive('icheck',value);
                            });
                        }
                    });
            });
        }
    };
});

我的HTML:

<body ng-controller="VotesCtrl">
<div>
    <ul>
        <li class="check" ng-click="">
            <input type="checkBox" ng-model="master" />
        </li>
        <li class="created">
            <a>CREATED</a>
        </li>
        <li class="ip">
            <b>IP ADDRESS</b>
        </li>
        <li class="status">
            <b>STATUS</b>
        </li>
    </ul>
    <ul ng-repeat="Vote in Votes">
        <li class="check">
            <input type="checkBox" ng-model="Vote.cb" ng-checked="master" />
        </li>
        <li class="created" ng-class="{selected: Vote.id == selectedID}">
            <a href="#" ng-click="expand(Vote)">{{Vote.created|date}}</a>
        </li>
        <li class="ip">
            {{Vote.ip}}
        </li>
        <li class="status">
            {{Vote.status}}
        </li>
    </ul>
</div>
<br />
<br />
<div class="details" ng-init="expand(Votes[0])">
    <h3>Details:</h3>
    <div>DATE: {{Vote.created | date}}</div>
    <div>IP: {{Vote.ip}}</div>
    <div >
        Cookies:
        <div>
            <input icheck type="radio" ng-model="Vote.userIdentification" name="iCheck" value="FLASH-COOKIES" />
            <span>FLASH COOKIES</span>
        </div>
        <div>
            <input icheck type="radio" ng-model="Vote.userIdentification" name="iCheck" value="HTTP-COOKIES" />
            <span>HTTP COOKIES</span>
        </div>
        <div>
            <input icheck type="radio" ng-model="Vote.userIdentification" name="iCheck" value="IP-ADDRESS" />
            <span>IP ADDRESS</span>
        </div>
    </div>
</div>
</body>
已经解决了这个链接: https://github.com/fronteed/iCheck/issues/62到 wajatimur
webApp.directive('icheck',$parse) {
    return {
        require: 'ngModel',link: function($scope,$attrs,ngModel) {
            return $timeout(function() {
                var value;
                value = $attrs['value'];

                $scope.$watch($attrs['ngModel'],function(newValue){
                    $(element).iCheck('update');
                })

                return $(element).iCheck({
                    checkBoxClass: 'icheckBox_flat-aero',radioClass: 'iradio_flat-aero'

                }).on('ifChanged',function(event) {
                    if ($(element).attr('type') === 'checkBox' && $attrs['ngModel']) {
                        $scope.$apply(function() {
                            return ngModel.$setViewValue(event.target.checked);
                        });
                    }
                    if ($(element).attr('type') === 'radio' && $attrs['ngModel']) {
                        return $scope.$apply(function() {
                            return ngModel.$setViewValue(value);
                        });
                    }
                });
            });
        }
    };
});

angularjs – 通过使用指令集成Angular和JQuery.iCheck不起作用的更多相关文章

  1. BootStrap iCheck插件全选与获取value值的解决方法

    这篇文章主要介绍了BootStrap iCheck插件全选与获取value值的解决方法,解决方法其实很简单,下面小编给大家分享下这方面的知识

  2. 详解Bootstrap的iCheck插件checkbox和radio

    这篇文章主要详细介绍了Bootstrap的iCheck插件checkbox和radio的知识及bootstrap icheck获取radio的value值的方法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧

  3. AngularJS在自定义指令中包含ui-select

    我设法通过在模板中设置ng-model来进行绑定工作

  4. angularjs – 在测试angular指令时,isolateScope()返回undefined

    使用Angularv1.2.25和rails资产管道,我试图测试指令的隔离范围确实已经更新.由于isolateScope()返回undefined我得到预期未定义的定义…

  5. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  6. angularjs – 更新数组时如何避免刷新ng-repeat DOM列表

    因此,“trackby”实际上将检查传入对象的属性并替换旧对象并仍然保留id.这很激烈.值得注意的是,“trackby”也适用于除ng-repeat之外的其他指令,例如select.我做了一个小小的演示,对于那些可能会对一切如何运作感到困惑的人……

  7. angularJs的国家选择控制

    p=preview使用ng-option指令使用ng-repeat指令:控制器中的国家范围:

  8. angularjs – 未知提供程序从Angular 1.0切换到1.2.3

    在AngularJS1.2.1中,路径模块已在单个文件angular-route.min.js中拉出,您需要根据发布的错误添加对此文件的引用和angular-sanitize.min.js.您还需要在应用程序中注入ngRoute和ngSanitize:

  9. AngularJS – 在指令中加载动态模板HTML

    我有一个指令从外部HTML文件加载内容.传递给该指令的是一些范围数据,用于呈现该HTML片段.例如

  10. angularjs – 如何使用jasmine测试$timeout操作的持续时间?

    假设我在指令中有以下匿名功能:这成功了.现在,如果我想编写一个测试,使用jasmine,以确保在~2s后删除该类,将如何做?我应该补充一点,到目前为止我尝试过使用jasmine.Clock和waitsFor方法,在这两种情况下,测试都失败了.值得注意的是,当我在指令中将$timeout更改为setTimeout时,两个测试都已通过,因此angular的行为似乎在这里发挥作用..从1.2$timeout.flush()开始,需要一个延迟参数来模拟类似于jasmine.Clock模拟的时钟,但是以一种使Ang

随机推荐

  1. Angular2 innerHtml删除样式

    我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

  2. 为Angular根组件/模块指定@Input()参数

    我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

  3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

    我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

  4. 离子框架 – 标签内部的ng-click不起作用

    >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

  5. Angular 2:将值传递给路由数据解析

    我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

  6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  7. 角度5模板形式检测形式有效性状态的变化

    为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

  8. Angular 2 CSV文件下载

    我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

  9. angularjs – Angular UI-Grid:过滤后如何获取总项数

    提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

  10. angularjs – 迁移gulp进程以包含typescript

    或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

返回
顶部