javascript - AngularJS,共享数据服务多次触发

标签 javascript angularjs angular-services

我在我的应用程序中遇到了多次触发共享数据服务的问题,现在我将尝试解释它。

在带有 Controller “home”的主页上,用户可以选择三个菜单项之一,在用户选择其中一个项目(例如第一个)后,他将重定向到此 View ,并具有自己的 Controller “table” '。该 View 底部有一个表格和选项卡,每个选项卡都有自己的 Controller “tab1 等”。通过单击行,我在选项卡的 Controller 之间共享该行的 id,该选项卡可以加载与该特定行相关的内容。目前一切进展顺利。

接下来,当用户单击主页按钮时,他将重定向到主页,如果他再次单击项目(例如第一个项目),共享服务将触发两次,并返回相同的 ID 两次,这是第三次分享服务会触发3次等等

在我的代码下面,如果有人能解释我所缺少的内容,我将不胜感激。提前致谢。

  app.controller('table', [
      '$scope', 'tab1ID', 'tab2ID', 'tab3ID'
        function ($scope, tab1ID, tab2ID, tab3ID) {

             $scope.rowSelection($scope, function (row) {

                    tab1ID.setId(row.id);
                    tab2ID.setId(row.id);
                    tab3ID.setId(row.id)

                });

  app.controller('tab1', [
      '$scope', 'tab1ID', dataService
        function ($scope, tab1ID, dataService) {

         tab1ID.getId().then(null, null, function (id) {

// return increment count of 'id' after redirecting from home view to table view
// dataService firing for each incremented id (1 for 1, 2 for 2 and etc)

            dataService.rowData(id)
                .then(function (res) {

                $scope.data = res;

            })
       });

  .factory(
        'tab1ID', function ($q) {

            var self = this,
                defer = $q.defer();

            this.share = '';

            return {
                getId: function () {
                    return defer.promise;
                },
                setId: function (id) {

                    self.share = id;
                    defer.notify(self.share);
                }
            }
        }
    );

最佳答案

所以最后我想出了如何击败多重触发。我为即将到来的 id 添加了一个新变量声明,并设置 Angular 监视来跟踪该变量的变化。也许这是一个丑陋的方法,但它对我有用

   tab1ID.getId().then(null, null, function(id){
        $scope.id = id
    });

    $scope.$watch('id', function (newVal, oldVal) {

        if (typeof newVal !== 'undefined') {

             dataService.rowData(id)
                .then(function (res) {

            $scope.data = res;
        })
   }) 

关于javascript - AngularJS,共享数据服务多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41107945/

相关文章:

php - 如果已经使用 Laravel 作为后端,为什么还要在前端使用 AngularJs?

javascript - 使用 firebase 的 Angular 应用程序获取 $add 不是一个函数

javascript - 在 angularjs 中使用服务

javascript - 如何将JS日期字符串转换为django日期时间格式?

javascript - 道格拉斯克罗克福德的 “Javascript: The Good Parts” 第 5.5 章

javascript - 使用 Javascript 在标签中显示列表项

angular - 服务通知的组件

javascript - 为什么函数的调用成员不能赋值给变量

javascript - 如何使用 Protractor 在 e2e 测试中预期元素的动态计数

javascript - 使用 AngularJS 展开和折叠