【问题标题】:Auto trigger function throuigh service in angularjs通过angularjs中的服务自动触发功能
【发布时间】:2017-09-30 18:20:55
【问题描述】:

大家好,我正在使用angulrajs 将一个值从一个controller 传递到另一个使用服务的控制器,它工作正常,但我需要的是当controller 2 中的服务值发生变化时,当范围值时,我在一个范围内获得服务值更改我需要在service 值更改时触发它称为refresh 的函数,并且我需要在这里调用刷新函数我的小提琴

https://jsfiddle.net/ctawL4t3/10/

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    你可以$watch你的value.storeObject。虽然这不是最佳实践,但它适合这种功能。

    $scope.$watch('value.storedObject', function(newVal) {
      if(newVal !== '') {
        refresh()
      }
    })
    

    working fiddle(打开控制台查看refresh函数日志)

    【讨论】:

    • hi tanmay 页面刷新后服务值更改为 null 但我需要最后输入的值
    • @jose 您可以在刷新时使用localStorageng-change,具体取决于您想在哪里进行操作。使用起来相当简单。查看localStorage docs
    • 使用本地存储意味着它不会删除?
    • @jose 这意味着它将在页面重新加载时出现,阅读有关如何存储然后访问它的文档。它非常易于使用
    【解决方案2】:

    你可以尝试使用angular默认$emit$broadcast,或者尝试在自己的服务中做2个简单的功能

    angular.module('app').factory('StoreService', function() {
    
      var listeners = {};
    
      var emit = function(name, val) {
         if(listeners[name]) {
            listeners[name](val)
         }
      }
    
      var on = function(name, callback) {
           listeners[name] = callback;
      }
    
      return {
        emit: emit,
        on: on,
        storedObject: ''
      };
    });
    

    JSFiddle example

    JSFiddle example $watch

    JSFiddle example ng-change 更好,因为你可以轻松使用debounce

    【讨论】:

    • 它正在工作,但是当按钮单击时,只有功能触发我需要的是当控制器 1 值更改时自动刷新功能将调用帮助如何做到这一点
    • 我更新了我的答案。您可以将其附加到 ng-change 指令或使用 $watch
    【解决方案3】:

    你可以使用广播功能 请检查此 SO 链接以找到相关答案

    How to call a function from another controller in angularjs?

    app.controller('One', ['$scope', '$rootScope'
        function($scope) {
            $rootScope.$on("CallParentMethod", function(){
               $scope.parentmethod();
            });
    
            $scope.parentmethod = function() {
                // task
            }
        }
    ]);
    app.controller('two', ['$scope', '$rootScope'
        function($scope) {
            $scope.childmethod = function() {
                $rootScope.$emit("CallParentMethod", {});
            }
        }
    ]);
    

    【讨论】:

    • 我需要为@Nair Athul 服务。如果可能的话,请更新我的小提琴
    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 2019-02-25
    • 2015-09-02
    • 1970-01-01
    • 2012-10-30
    • 2017-05-03
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多