加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS触发器和监视对象值从控制器改变服务

发布时间:2020-12-17 08:41:26 所属栏目:安全 来源:网络整理
导读:我试图监视来自控制器的服务的更改。我在stackoverflow上基于许多qns尝试了各种东西,但我一直无法使它的工作。 html: div ng-app="myApp" div ng-controller="MyCtrl" div ng-click="setFTag()"Click Me/div /div /div javascript: var myApp = angular.m
我试图监视来自控制器的服务的更改。我在stackoverflow上基于许多qns尝试了各种东西,但我一直无法使它的工作。

html:

<div ng-app="myApp">
    <div ng-controller="MyCtrl">
        <div ng-click="setFTag()">Click Me</div>
    </div> 
</div>

javascript:

var myApp = angular.module('myApp',[]);

myApp.service('myService',function() {
    this.tags = {
        a: true,b: true
    };


    this.setFalseTag = function() {
        alert("Within myService->setFalseTag");
        this.tags.a = false;
        this.tags.b = false;

        //how do I get the watch in MyCtrl to be triggered?
    };
});


myApp.controller('MyCtrl',function($scope,myService) {

    $scope.setFTag = function() {
        alert("Within MyCtrl->setFTag");
        myService.setFalseTag();
    };        

    $scope.$watch(myService.tags,function(newVal,oldVal) {
        alert("Inside watch");
        console.log(newVal);
        console.log(oldVal);
    },true);

});

如何在控制器中触发手表?

jsfiddle

尝试这样写$ watch:
myApp.controller('MyCtrl',myService) {


    $scope.setFTag = function() {
       myService.setFalseTag();
    };        

    $scope.$watch(function () {
       return myService.tags;
     },oldVal) {
        /*...*/
    },true);

});

演示Fiddle

[编辑]

有时这种方式不会工作,特别是如果服务已从3D方更新。

为了使它工作,我们必须帮助角到消防消化循环。

这里是一个例子:

在服务端,当我们想要更新标签值写如下:

if($rootScope.$root.$$phase != '$apply' && $rootScope.$root.$$phase != '$digest'){
   $rootScope.$apply(function() {
     self.tags = true;
   });
 }
 else {
   self.tags = true;
  }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读