Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 尝试使用指令将jQuery插件回调函数传递给控制器函数_Angularjs - Fatal编程技术网

Angularjs 尝试使用指令将jQuery插件回调函数传递给控制器函数

Angularjs 尝试使用指令将jQuery插件回调函数传递给控制器函数,angularjs,Angularjs,我正在使用一个jQuery插件,它实现了一些我想使用的回调。我试图将回调函数直接发送到控制器,但参数发送不正确 这是我的密码 flairApp.directive('fullpage', function() { return { restrict: 'A', link: function(scope, element, attrs) { $(element).fullpage({ afterLoad

我正在使用一个jQuery插件,它实现了一些我想使用的回调。我试图将回调函数直接发送到控制器,但参数发送不正确

这是我的密码

flairApp.directive('fullpage', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            $(element).fullpage({
                afterLoad: function(anchorLink, index){
                    scope.afterLoad(anchorLink, index)
                }
            });
        }
    };
});
和控制器

angular.module('homeController', ['ngSanitize'])

.controller('homeController', function($scope, Blog, $stateParams) {

    $scope.afterLoad = function (anchorLink, index) {
        console.log(anchorLink);
    };

});
html只有这个指令

<div fullpage></div>

如果我可以像这样使用指令调用函数,那就太棒了:

<div fullpage after-load="afterload"></div>

提前感谢。

$(元素)。fullpage()
将选项对象作为其参数。在这个选项对象中,您有一些选项,比如
后加载
。传递给afterLoad的函数在fullpage的内容中的某个地方作为回调执行

您可以在指令定义中使用如下内容将函数传递给指令:

scope: {
  afterLoadCallback: '&' // this value is attached to scope.afterLoadCallback
}
“&”表示我们希望传入一个函数。还有“@”和“=”,它们的行为都略有不同

所以

在你看来:

其中
foo
位于控制器的作用域上,该控制器控制使用fullpage的视图

如果我可以像这样使用指令调用函数,那就太棒了:

<div fullpage after-load="afterload"></div>

这可以通过指令中的隔离作用域来完成

从文档中:

&
&attr
-提供在父作用域上下文中执行表达式的方法。如果未指定属性名,则假定属性名与本地名相同。给定
作用域:{localFn:'&myAttr'}
的小部件定义,然后隔离作用域属性
localFn
将指向
count=count+value
表达式的函数包装器。通常需要通过表达式将数据从隔离范围传递到父范围,这可以通过将局部变量名和值的映射传递到表达式包装器fn来完成。例如,如果表达式是
increment(amount)
,那么我们可以通过调用
localFn
作为
localFn({amount:22})
来指定amount值


您可以创建一个隔离的作用域,并通过
&
绑定传递回调函数

这对于理解其工作原理也很有用

请看一下下面的演示或本演示

我还添加了
锚定
绑定,以便
后加载
返回一些有用的东西。在此之前,它返回
未定义的

angular.module('demoApp',[])
.controller('MainController',函数($scope){
$scope.callback=函数(链接、索引){
日志(链接、索引);
};
$scope.anchorLinks=[“第一页”、“第二页”、“第三页];
})
.directive('fullpage',function(){
返回{
限制:“A”,
范围:{
锚定:'=',
后载:“&”
},
链接:函数(范围、元素、属性){
$(元素)。整页({
锚:scope.anchors,
后加载:功能(锚点链接、索引){
后装({
链接:主播链接,
索引:索引
});
}
});
}
};
});

第一节
第二节
第三部分
<div fullpage after-load="afterload(anchorLink,index)"></div>