Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 显示来自其他位置的对象的数据_Javascript_Angularjs - Fatal编程技术网

Javascript 显示来自其他位置的对象的数据

Javascript 显示来自其他位置的对象的数据,javascript,angularjs,Javascript,Angularjs,所以我在我的项目中使用了当前的angular,但是我在添加动态内容时遇到了问题 因此,我创建了一个带有ng repeat的列表,当我单击它时,我从我单击的specefic项中获取所有信息,并将其添加到一个新的范围项中 $scope.click = function() { $scope.personData = this.person; }; 现在我想在一个特定的地方打印{{personData.name}},它在元素中工作得很好,但是当

所以我在我的项目中使用了当前的angular,但是我在添加动态内容时遇到了问题

因此,我创建了一个带有ng repeat的列表,当我单击它时,我从我单击的specefic项中获取所有信息,并将其添加到一个新的范围项中

        $scope.click = function() {
            $scope.personData = this.person;
        };
现在我想在一个特定的地方打印{{personData.name}},它在元素中工作得很好,但是当我想在元素之外的其他地方使用它时(例如在NG视图中的另一个页面中),我将完全相同的控制器链接到它,在我看来,我可以访问相同的数据,但它不会在我的页面上更新

就在那里

app.controller('showDataController', function(jsonData, $scope, infoService) {
    jsonData.async().then(function(response) {

        $scope.data = response;

        $scope.click = function() {
            infoService.setPersonData(this.person);
        };

    });
});

app.service('infoService', function() {
    var people = {};
    function setPersonData(person) {
        people[person.name] = person; // assuming person is an object
        return people;
    }

});

这是因为在每个视图/状态重新加载时,控制器都会重新加载,因此没有对该范围的引用$作用域是指当前控制器。要在应用程序中传递对象,请创建一个可以使用get和set方法存储和检索该信息的服务或工厂。然后,用于添加项目的控制器代码可以是:

$scope.click = function() {
    myService.setPersonData(this.person);
};
要检索它,请执行以下操作:

$scope.personData = myService.getPersonData(this.person.name); // a reference to that person is needed
您的服务集和get方法可能类似于:

var people = {};

function setPersonData(person) {
    people[person.name] = person; // assuming person is an object
    return people;
}

function getPersonData(name) {
    return people[personName];
}
更新 根据问题中更新的代码,尝试以下操作:

app
.service('infoService', infoService)
.controller('showDataController', showDataController);

showDataController.$inject = ['jsonData', '$scope', 'infoService']; // this makes your code minification safe

function infoService() {
    var people = {};

    // returns an object with references to the methods defined in the service - aka the Revealing Module Pattern
    return {
        setPersonData: setPersonData
        //getPersonData: getPersonData (comment out once this method is declared below) 
    };

    function setPersonData(person) {
        people[person.name] = person; // assuming person is an object
        return people;
    }

});

function showDataController(jsonData, $scope, infoService) {
    jsonData.async().then(function(response) {

        $scope.data = response;

        $scope.click = function() {
            infoService.setPersonData(this.person);
        };

    });
});

注意:通常我会将应用程序的不同组件放在不同的文件中。一个很好的样式指南是,但是还有其他类似的样式指南

aah是有意义的,但是,由于我的应用程序太小,我可以使用rootscope来实现全局范围,最好不要使用$rootscope,因为它不能保证稳定-应用程序的所有部分都可以访问它。我尝试了所有方法,但我不能在controllerI中使用我的函数。我不断得到“方法不是函数”。您是否正在注入服务或者正确地插入控制器?你能发布你的代码吗?是的,我可以从服务中获取字符串,但不能使用函数更新主帖子。1秒