控制器中未更新AngularJS工厂数据

控制器中未更新AngularJS工厂数据,angularjs,angularjs-factory,angularjs-1.5,Angularjs,Angularjs Factory,Angularjs 1.5,我不确定我做错了什么这是我如何设置其他工厂来尽可能地共享数据的,但是即使数组应该通过引用传递,我也不会覆盖数组,这样引用就不会丢失模板也不会加载我可以看到的来自“全部查找”请求的数据。有人能看到我做了什么/没有做什么来让这个工厂工作并在控制器之间共享吗 我最初没有使用服务来设置它,因此我知道从请求返回的数据确实与视图一起工作,如果您查看我的存根,数据就在那里(看起来是一样的),但是视图从不更新。如果这不是一个明显的错误,我已经错过了,而且似乎不理解,我也希望能有一个快速的评论,因为我假设是对象/

我不确定我做错了什么这是我如何设置其他工厂来尽可能地共享数据的,但是即使数组应该通过引用传递,我也不会覆盖数组,这样引用就不会丢失模板也不会加载我可以看到的来自“全部查找”请求的数据。有人能看到我做了什么/没有做什么来让这个工厂工作并在控制器之间共享吗

我最初没有使用服务来设置它,因此我知道从请求返回的数据确实与视图一起工作,如果您查看我的存根,数据就在那里(看起来是一样的),但是视图从不更新。如果这不是一个明显的错误,我已经错过了,而且似乎不理解,我也希望能有一个快速的评论,因为我假设是对象/数组通过引用传递的事实使这一切工作正常

联系人控制器

// Stripped down for brevity...
(function () {

    'use strict';

    function ContactsController(ContactsFactory,
                                ContactsResource) {

        var vm = this;

        vm.contacts = ContactsFactory.get();

        vm.findAll = function () {

            ContactsResource
                .all()
                .then(function (response) {
                    ContactsFactory.add(response.contacts); // <-- an array of objects for example: [{id: 5, username: "Richard39", email: "Sanford.Marilyne@Gibson.org",…},…]
                });
        };

        vm.remove = function (contact, index) {

            ContactsResource
                .remove()
                .then(function (response) {
                    ContactsFactory.remove(index);
                });
        };

        function init() {
            vm.findAll();
        }

        init();
    }

    ContactsController.$inject = [
        'ContactsFactory',
        'ContactsResource'
    ];

    angular
        .module('app')
        .controller('ContactsController', ContactsController);

})();
//为简洁起见,请将其精简。。。
(功能(){
"严格使用",;
功能触点控制器(触点工厂,
联系人(来源){
var vm=这个;
vm.contacts=ContactsFactory.get();
vm.findAll=函数(){
联系人来源
.all()
.然后(功能(响应){

ContactsFactory.add(response.contacts);//乍一看,我认为您必须将contacts var与您的服务绑定在一起,如下所示:var service={contacts:[]}当你从api调用中获取联系人时,你会设置service.contacts=response…等等,然后在你的控制器集中设置vm.contacts=ContactsFactory.contacts.Hi@Rob,这起作用了,我更新了我的问题,只是问当你将变量包装在一个对象中,然后将其传递回时,它为什么起作用当我返回service.contacts时。您将数据绑定到服务中的一个对象,并返回该服务供您的控制器使用。由于该服务已绑定并被监视,因此对该对象属性的任何更改都会反映在使用它的控制器中。如果您仅使用var contacts,则它不会绑定到任何对象,因此不会被禁用被棱角分明的小忍者所吸引:)哈哈,太棒了,谢谢@Rob。如果你想要分数,我会用你的描述标记一个答案作为正确的答案。不,那很好。很高兴它起作用了。理解双向绑定需要一点时间。工藤在代码风格上。顺便说一句,你已经有了一个良好的开端。
// Stripped down for brevity...
(function () {

    'use strict';

    function ContactsFactory() {

        var contacts = [];

        function get() {
            return contacts;
        }

        function add(contacts) {

            console.log(contacts) // <-- array of objects

            angular.forEach(contacts, function(contact) {

                console.log(contact) // <-- object
                contacts.list.push(contact);
            });

            console.log(contacts) // <-- objects pushed onto array [Object, Object, Object, Object, Object,…]

            // But no update in view, which worked with same resource 
            // request, prior to switching to factory to share between 
            // controllers
        }

        function remove(index) {
            contacts.splice(index, 1);
        }

        // ---
        // PUBLIC API.
        // ---

        return {
            get: get,
            add: add,
            remove: remove
        };
    }

    ContactsFactory.$inject = [];

    angular
        .module('app')
        .factory('ContactsFactory', ContactsFactory);

})();
(function () {

    'use strict';

    function ContactsFactory() {

        var service = {
            contacts: []
        };

        function get() {
            return service.contacts;
        }

        function add(contacts) {
            angular.forEach(contacts, function(contact) {
                service.contacts.push(contact);
            });

            console.log(contacts);
        }

        function remove(index) {
            contacts.splice(index, 1);
        }

        return {
            contacts: service.contacts, // <-- Rob's suggestion
            get: get, // <-- this also works now as well
            add: add,
            remove: remove
        };
    }

    ContactsFactory.$inject = [];

    angular
        .module('app')
        .factory('ContactsFactory', ContactsFactory);

})();