生成(编译)ng-click按钮抛出“范围。$ apply不是函数”

时间:2015-05-01 10:37:02

标签: jquery angularjs

一直在玩这个,并得到一个非常奇怪的错误。 我不会把整个代码放在这里,因为整个地方都有很多spagetti的方法,但我认为我可以隔离代码。

我有一些代码会根据数据库中的一些变量在屏幕上生成一堆按钮。主要是链接,但我希望数据库保存有关如何处理它的信息。所以我希望我的功能: 从数据库中获取数据(完成) 找一些额外的条目,二进制声音和图像(完成) 画一个漂亮的按钮(它不漂亮,但它是一个按钮) 当用户按下按钮时创建ng-click事件(完成第1步) 编译html以整理ng-click的dom(它运行...)

这一切似乎都有效,我在屏幕上显示一个按钮,但是当我按下它时,我收到以下错误消息:

Uncaught TypeError: scope.$apply is not a function

执行此操作的代码(简化):

            var newPad = '<button class="padbtn" ';
            newPad = newPad + 'data-ng-click="'+dataPad.comSound+'('+dataPad.typeSound+','+padPos+')">';
            newPad = newPad + '<img class="padImg" src="/api/getImg/'+dataPad.srcImage+'" style="width:175px; height 175px;"/>'
            newPad = newPad + '<br/>'+dataPad.name+'</button>';
            console.log(newPad);
            var padElement = $compile(newPad)(true);
            console.log(padElement);
            $('#cell'+padPos).append(padElement);

使再现(和自包含)

更简单
var newPad = '<button class="padbtn" data-ng-click="playBeat(smpBeat,C1)"><img class="padImg" src="/api/getImg/554240a17b221e1a2ffda099" style="width:175px; height 175px;"/><br/>Clap</button>'
                var padElement = $compile(newPad)(true);
            $('#targetID').append(padElement);

图片和所有内容都加载了,但是一旦我按下按钮,我就会收到错误消息。

1 个答案:

答案 0 :(得分:1)

在这里你必须编译$scope

    var newPad = '<button class="padbtn" data-ng-click="playBeat(smpBeat,C1)"><img class="padImg" src="/api/getImg/554240a17b221e1a2ffda099" style="width:175px; height 175px;"/><br/>Clap</button>'
    var padElement = $compile(newPad)($scope);
    $('#targetID').append(padElement);

请参阅工作示例here