2013-07-12 38 views
0

我正面临角度和基础之间的干扰导致的错误。角度NG检查干扰基础

基本上,我只是复制粘贴the example provided in the doc

Check me to check both: <input type="checkbox" ng-model="master"><br/> 
<input id="checkSlave" type="checkbox" ng-checked="master"> 

两种情况:

  • 时,我有$(document).foundation();:漂亮的设计,例如不工作

  • 当我评论$(document).foundation(); :没有更多的基础善良,实例工程

我想这是由于基金会增加了额外的标记,但仍然没有多大帮助。

我正在寻找一种方法来解决这个问题?

回答

1

您不能在Angular驱动的DOM上调用类似.foundation()的库初始化程序,因为在Angular创建它们之前,DOM元素实际上不存在。

这是任何客户端MVC框架的主要速度颠簸,但请放心,您并不是唯一希望实现此类功能的用户。

使用Foundation with Angular的正确方法是将其小部件封装在Directives中。

这里有一些资源,帮助您:

+0

我只需要保持复选框设计一个这样或那样的。 Iguess我应该告诉基金会让他们独处 – apneadiving

0

您可以创建自定义指令而不是使用ng-checked,它将处理基金会的附加标记。它可能不是空闲的方式,但它会解决你的问题,因为它知道太多关于基础实施等

指令段从original blog post

directive('ngCheckedFoundation',['$timeout', function($timeout) { 
    function markCheckBox(value, scope, element, attr) { 
     //timeout to avoid the foundation javascript action changed by this directive 
     $timeout(function() { 
       if(value) { 
        attr.$set("checked", true); 
        element.next().addClass('checked'); 
       } 
       else { 
        attr.$set("checked", false); 
        element.next().removeClass('checked'); 
       } 
     }, 200); 
    } 

    function link (scope, element, attr, ctrl) { 
     scope.$watch(attr["ngCheckedFoundation"], function(n,o) { 
      if(n != o) { 
      markCheckBox(n, scope, element, attr); 
      } 
     }); 
     markCheckBox(scope.$eval(attr.ngCheckedFoundation), scope, element, attr); 
    } 

    return({ 
     link: link, 
     restrict: "A", 
    }); 
}])