Angular:观察数据变化服务?

opt*_*con 5 javascript angularjs

我有一个定义为这样的服务:

appServices.service('SharedData', function() {
    var data = {};

    function setContacts(contacts) {
        data.contacts = contacts;
    };

    function getContacts() {
        return data.contacts;
    };

    return {
        setContacts: setContacts,
        getContacts: getContacts
    };
});
Run Code Online (Sandbox Code Playgroud)

在另一个控制器中,我按如下方式访问数据:

$scope.contacts = SharedData.getContacts();
Run Code Online (Sandbox Code Playgroud)

这一切都很好 - 但是我希望$scope.contacts每当SharedData中的数据发生变化时都会收到警报并更新数据.

我该如何做到这一点?

p e*_*e p 2

实现此目的的一种方法是在您的服务中定义一个函数,该函数允许您注册一个回调,以便在setContacts调用时调用(onContactsUpdated如下)。这个解决方案并不完美(例如,它只允许您注册一个“处理程序”),但应该能让您走上正确的轨道。如果需要在多个地方使用,您可以对其进行调整。

appServices.service('SharedData', function() {
    var data = {};

    function setContacts(contacts) {
        data.contacts = contacts;
        if(typeof(data.contactsUpdatedCallback) !== "undefined"){
            data.contactsUpdatedCallback();
        }
    };

    function getContacts() {
        return data.contacts;
    };

    function onContactsUpdated(callback){
        data.contactsUpdatedCallback = callback;
    };

    return {
        setContacts: setContacts,
        getContacts: getContacts,
        onContactsUpdated: onContactsUpdated
    };
});
Run Code Online (Sandbox Code Playgroud)

然后在你的控制器中:

SharedData.onContactsUpdated(function(){
    //do something with updated SharedData.getContacts()
});
Run Code Online (Sandbox Code Playgroud)