首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在服务中使用$watch?

在服务中使用$watch?
EN

Stack Overflow用户
提问于 2013-07-23 17:38:07
回答 3查看 30.1K关注 0票数 61

是否可以在服务内的对象数组上设置$watch (我希望$watch声明本身位于服务内)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-23 17:52:30

通过注入$rootScope并将函数作为$watch方法的第一个参数,可以向监视集添加任何表达式。伪代码:

代码语言:javascript
复制
$rootScope.$watch(function() {
  return //value to be watched;
}, function watchCallback(newValue, oldValue) {
  //react on value change here
});

不要忘记第三个参数,即$watch方法的布尔参数。如果您想深入观察整个对象的更改,则需要指定true

票数 121
EN

Stack Overflow用户

发布于 2014-03-25 09:13:04

服务本质上类似于类和内部方法。您可以设置一个方法,您可以从控制器调用该方法,该方法的参数是作用域并应用监视表达式:

代码语言:javascript
复制
app.service('myservice',function(){
    this.listen = function($scope) {
        $scope.$watch(function(){return someScopeValue},function(){
           //$scope.dosomestuff();
        });
    }
});

//your controller

function myCtrl($scope,myservice) {
    $scope.listen = function() {
        myservice.listen($scope);
    }

    //call your method
    $scope.listen();
}

更新:如果您正在尝试查看服务中的私有局部变量,请参阅使用$rootScope的公认答案。如果你试图在一个局部作用域中$watch一个$scope变量,那么上面是你最好的选择。他们正在实现两个截然不同的目标。

票数 15
EN

Stack Overflow用户

发布于 2018-02-28 00:48:37

嘿,刚刚有一个情况,我有一个相当大的手表设置在两个不同的控制器上。

因为我不想重复我刚刚定义的任何代码,以便在我的服务中运行:

代码语言:javascript
复制
angular
    .module('invoice')
    .factory('invoiceState', function () {
        var invoice = {
            client_info: {
                lastname: "",
                firstname: "",
                email: "",
                phone: "",
                id_client: "",
                ... 
             }
        }
        invoice.watchAccommodation = function (newVal, oldVal) {
            var accommodation = newVal;
            //Whatever you would normally have in your watch function
        }

然后,我可以在我注入了服务的任何控制器的监视中调用这个函数

代码语言:javascript
复制
function NewInvoiceCtrl(invoiceState) {
    $scope.$watch('invoice.accommodation',invoiceState.watchAccommodation, true);
}

我没有太多使用AngularJS的经验,所以我不能真正深入讨论这种方法的性能方面,但它是有效的;)

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

https://stackoverflow.com/questions/17806600

复制
相关文章

相似问题

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