首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >刷新/重新加载angularjs自定义指令

刷新/重新加载angularjs自定义指令
EN

Stack Overflow用户
提问于 2016-04-03 03:06:21
回答 1查看 14.5K关注 0票数 1

我在一个ionic项目中使用carousel (https://market.ionic.io/plugins/morph-carousel)。这是一个自定义的angularjs指令。我在一个屏幕上使用2个旋转木马。现在,我想要的是在更改第一个轮播时,第二个轮播也应该更新为新值。为此,必须重新加载/刷新第二个轮播自定义指令。有没有办法刷新/重新加载angularjs中的自定义指令?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-03 03:27:54

link函数的第一个指令中添加一个监视器。

代码语言:javascript
运行
复制
scope.$watch('thingToWatchForRefershing', function (newValue, oldValue) {
    if (!newValue || angular.equals(newValue, oldValue)) {
        return;
    }
    scope.$emit('somethingChangedInFirstDirective', dataToBePassed);
});

现在,在您的第二条指令中,有一个渲染函数,当调用该函数时,它将刷新模型和视图,并添加一个侦听器。

代码语言:javascript
运行
复制
link: function () {
    scope.render = function () {
        // all logic goes here
    };
    scope.$on('somethingChangedInFirstDirective', function (ev, data) {
        // render everything again i.e. reload the directive
        scope.render();
    });
    // first time rendering
    scope.render();
}

希望它能有所帮助:)

更新:

  1. 仅将属性传递给第一个指令。例如:<custom-carousel data-is-to-be-watched="isToBeWatched" />,在您的控制器集中:$scope.isToBeWatched = true。另外,对于第二个指令的用法:<custom-carousel data-is-tobe-reloaded="isToBeReloaded" />和在同一个控制器中初始化:$scope.isToBeReloaded = false;
  2. If它是一个独立的指令,有它自己的作用域,然后:让这个scope:{isToBeWatched: '=?', isToBeReloaded: '=?'}, link: function (...) {...}
  3. Once指令被加载,检查<custom-carousel data-is-tobe-reloaded="isToBeReloaded" />,is if (scope.isToBeWatched),这意味着第一个指令被加载/更改,因为我们只在第一个指令中传递了attr。现在,发出一个事件,它将在控制器中被监听。在侦听器do:$scope.isToBeReloaded = true;中,它将在第二个指令的作用域中设置变量isToBeReloaded,因为我们在第二个isToBeReloaded中传递了一个监视器,并重新加载了我前面提到的呈现fn。

粗略代码:

控制器:

代码语言:javascript
运行
复制
$scope.isToBeWatched = true;
$scope.isToBeReloaded = false;

$scope.$on('somethingChangedInFirstDirective', function () {
    $scope.isToBeReloaded = true;
});

指令:

代码语言:javascript
运行
复制
scope: {
isToBeWatched: '=?',
isToBeReloaded: '=?'
},
 link: function (scope) {
 scope.render = function () {
    if (scope.isToBeWatched) {
        scope.$emit('somethingChangedInFirstDirective');
    }
 };
 scope.render();

scope.$watch('isToBeReloaded', function (newValue, oldValue) {
    if (!newValue || angular.equals(newValue, oldValue)) 
         return; 
    scope.render();
})

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36377578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档