使用服务更新 AngularJS 中的控制器
Update controllers in AngularJS with Services
我的英语不好请见谅!!
你好,我有一个问题:
var app = angular.module('testino', []);
app.controller('listController', listController );
listController.$inject = ['service'];
function listController(service) {
console.log("listController instanziato");
vm = this;
vm.lista = service.getLista();
vm.add = function () {
service.addElement();
service.getLista;
}
vm.load = service.load();
}
app.controller('loadingController', loadingController);
loadingController.$inject = ['service'];
function loadingController (service) {
console.log("loadingController instanziato");
var vm = this;
vm.load = service.load();
}
app.factory('service', service);
service.$inject = ['$http'];
function service ($http) {
console.log("service instanziato");
var sv = this;
sv.lista = [ {1:"ciao"},{2:"ciao"},{3:"ciao"}];
sv.load = "LOADING"
return {
getLista : getLista,
addElement : addElement,
load : getLoading
}
function getLista() {
return sv.lista;
}
function addElement() {
sv.lista.push( {ciao:4} );
console.log (sv.load);
sv.load = "LOADED";
console.log (sv.load);
}
function getLoading () {
return sv.load ;
}
}
<!doctype html>
<html ng-app="testino">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script>
<script src="example.js"></script>
</head>
<body>
<div ng-controller="loadingController as vm">loading: {{vm.load}} </div>
<ul ng-controller="listController as lvm">
<button ng-click='lvm.add()'>Ciccio</button>
<li ng-repeat = "e in lvm.lista">{{e}} </li>
<li>Caricamento: {{lvm.load}}</li>
<input type='text' ng-model='lvm.load' />
</ul>
</body>
</html>
当我尝试推送(或弹出)数组(sv.lista - 服务)中的元素时,它全部工作,但 listController 和 loadingController 上的变量 "vm.load" 没有更新..
我想获取服务数据并更新控制器,只更新服务数据。
我该怎么办?
萨克斯!!
您需要将加载状态绑定为一个对象。现在你 return 控制器以字符串形式启动时的加载状态,然后当状态更改时,你看不到任何更新,因为你在更改字符串时丢失了引用。使用对象,您可以保留对同一对象的多个引用,并且每个人都可以看到该对象何时更改。
var app = angular.module('testino', []);
app.controller('listController', listController );
listController.$inject = ['service'];
function listController(service) {
console.log("listController instanziato");
vm = this;
vm.lista = service.getLista();
vm.add = function () {
service.addElement();
vm.load = service.load();
}
vm.load = service.load();
}
app.controller('loadingController', loadingController);
loadingController.$inject = ['service'];
function loadingController (service) {
console.log("loadingController instanziato");
var vm = this;
vm.load = service.load();
}
app.factory('service', service);
service.$inject = ['$http'];
function service ($http) {
console.log("service instanziato");
var sv = this;
sv.lista = [ {1:"ciao"},{2:"ciao"},{3:"ciao"}];
sv.load = "LOADING";
sv.loadObj = { status: sv.load };
return {
getLista : getLista,
addElement : addElement,
load : getLoading
}
function getLista() {
return sv.lista;
}
function addElement() {
sv.lista.push( {ciao:4} );
console.log (sv.loadObj.status);
sv.loadObj.status = "LOADED";
console.log (sv.loadObj.status);
}
function getLoading () {
return sv.loadObj ;
}
}
<!doctype html>
<html ng-app="testino">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script>
<script src="example.js"></script>
</head>
<body>
<div ng-controller="loadingController as vm">loading: {{vm.load.status}} </div>
<ul ng-controller="listController as lvm">
<button ng-click='lvm.add()'>Ciccio</button>
<li ng-repeat = "e in lvm.lista">{{e}} </li>
<li>Caricamento: {{lvm.load}}</li>
<input type='text' ng-model='lvm.load.status' />
</ul>
</body>
</html>
我的英语不好请见谅!!
你好,我有一个问题:
var app = angular.module('testino', []);
app.controller('listController', listController );
listController.$inject = ['service'];
function listController(service) {
console.log("listController instanziato");
vm = this;
vm.lista = service.getLista();
vm.add = function () {
service.addElement();
service.getLista;
}
vm.load = service.load();
}
app.controller('loadingController', loadingController);
loadingController.$inject = ['service'];
function loadingController (service) {
console.log("loadingController instanziato");
var vm = this;
vm.load = service.load();
}
app.factory('service', service);
service.$inject = ['$http'];
function service ($http) {
console.log("service instanziato");
var sv = this;
sv.lista = [ {1:"ciao"},{2:"ciao"},{3:"ciao"}];
sv.load = "LOADING"
return {
getLista : getLista,
addElement : addElement,
load : getLoading
}
function getLista() {
return sv.lista;
}
function addElement() {
sv.lista.push( {ciao:4} );
console.log (sv.load);
sv.load = "LOADED";
console.log (sv.load);
}
function getLoading () {
return sv.load ;
}
}
<!doctype html>
<html ng-app="testino">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script>
<script src="example.js"></script>
</head>
<body>
<div ng-controller="loadingController as vm">loading: {{vm.load}} </div>
<ul ng-controller="listController as lvm">
<button ng-click='lvm.add()'>Ciccio</button>
<li ng-repeat = "e in lvm.lista">{{e}} </li>
<li>Caricamento: {{lvm.load}}</li>
<input type='text' ng-model='lvm.load' />
</ul>
</body>
</html>
当我尝试推送(或弹出)数组(sv.lista - 服务)中的元素时,它全部工作,但 listController 和 loadingController 上的变量 "vm.load" 没有更新..
我想获取服务数据并更新控制器,只更新服务数据。
我该怎么办?
萨克斯!!
您需要将加载状态绑定为一个对象。现在你 return 控制器以字符串形式启动时的加载状态,然后当状态更改时,你看不到任何更新,因为你在更改字符串时丢失了引用。使用对象,您可以保留对同一对象的多个引用,并且每个人都可以看到该对象何时更改。
var app = angular.module('testino', []);
app.controller('listController', listController );
listController.$inject = ['service'];
function listController(service) {
console.log("listController instanziato");
vm = this;
vm.lista = service.getLista();
vm.add = function () {
service.addElement();
vm.load = service.load();
}
vm.load = service.load();
}
app.controller('loadingController', loadingController);
loadingController.$inject = ['service'];
function loadingController (service) {
console.log("loadingController instanziato");
var vm = this;
vm.load = service.load();
}
app.factory('service', service);
service.$inject = ['$http'];
function service ($http) {
console.log("service instanziato");
var sv = this;
sv.lista = [ {1:"ciao"},{2:"ciao"},{3:"ciao"}];
sv.load = "LOADING";
sv.loadObj = { status: sv.load };
return {
getLista : getLista,
addElement : addElement,
load : getLoading
}
function getLista() {
return sv.lista;
}
function addElement() {
sv.lista.push( {ciao:4} );
console.log (sv.loadObj.status);
sv.loadObj.status = "LOADED";
console.log (sv.loadObj.status);
}
function getLoading () {
return sv.loadObj ;
}
}
<!doctype html>
<html ng-app="testino">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script>
<script src="example.js"></script>
</head>
<body>
<div ng-controller="loadingController as vm">loading: {{vm.load.status}} </div>
<ul ng-controller="listController as lvm">
<button ng-click='lvm.add()'>Ciccio</button>
<li ng-repeat = "e in lvm.lista">{{e}} </li>
<li>Caricamento: {{lvm.load}}</li>
<input type='text' ng-model='lvm.load.status' />
</ul>
</body>
</html>