angularjs - 多个指令要求新的/隔离的范围

标签 angularjs angularjs-directive angularjs-scope

我有一个指令,仅在 iframe 加载后调用函数。但是我收到多指令新/隔离范围错误。我的代码片段如下。

<iframe ng-src="{{src}}" ng-if="loginCheck" ng-show="false" data-iframe-on-load="iframeOnLoad" data-iframe-callback="testLoad()"></iframe>

js:

directive('iframeOnLoad', function () {
    return {
        restrict: 'A',
        scope: {
            callback: '&iframeCallBack'
        },
        link: function (scope, element, attrs) {
            element.on('load', function() {
                return scope.callback();
            });
        }
    };
})

Controller :

$scope.loginCheck = true;
$scope.testLoad= function () {
    alert('loaded...');
};

错误:

Error: [$compile:multidir] Multiple directives [iframeOnLoad, iframeOnLoad] asking for new/isolated scope on

最佳答案

您发布的代码没有问题,除了 &iframeCallBack 应该是 &iframeCallback。否则,请考虑将 data-iframe-callback="testLoad()" 更改为 data-iframe-call-back="testLoad()"

问题的可能原因是您通过复制粘贴指令的现有代码创建了多个指令,但忘记将指令名称更改为新指令。只需在代码中搜索 iframeOnLoad,我很确定您会找到两个具有此类名称的指令。

发生这种情况是因为 AngularJS 允许注册多个具有相同名称的指令。该模式可用于扩展指令的现有功能。但是,您只能为一个 DOM 元素创建一个隔离作用域,因此两个需要隔离作用域的同名指令是矛盾的。

工作示例请参见here .

重现与您相同的问题 here .

关于angularjs - 多个指令要求新的/隔离的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272366/

相关文章:

angularjs-directive - Ng-repeat 在 Sightly 中

javascript - 从指令链接函数观察 Controller 范围

javascript - 从 Controller 中的指令获取生成的元素

angularjs - CORS:AngularJS + Resteasy 3 + Wildfly

javascript - 循环遍历列表并填充表格

HTML RTL/LTR 开关

jquery - 侧滑菜单内容不移动

javascript - 将变量从当前范围传递到编译指令

javascript - AngularJS中的 Controller 有可能(部分类)概念吗?

javascript - AngularJS 指令调用另一个指令未正确传递数据以使用 $compile 进行渲染