所以我在我的项目中使用了当前的角度,但是添加动态内容时遇到了麻烦。
所以我创建了一个带有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;
}
});
答案 0 :(得分:2)
那是因为在每个视图/状态重新加载时控制器都会被重新加载,因此没有对该范围的引用。 $ scope指的是当前控制器。要在应用程序周围传递对象,请创建一个可以使用get和set方法存储和检索该信息的服务或工厂。然后,用于添加项目的控制器代码可以是:
$scope.click = function() {
myService.setPersonData(this.person);
};
检索它:
$scope.personData = myService.getPersonData(this.person.name); // a reference to that person is needed
您的服务集和获取方法可能类似于:
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);
};
});
});
注意:通常我会将应用程序的不同组件放在不同的文件中。一个好的风格指南是https://github.com/johnpapa/angular-styleguide,但还有其他像https://github.com/toddmotto/angularjs-styleguide