为什么我无法在 Angular JS Service.js 执行函数后更改数据?
Why I Cannot Change Data In Angular JS Service.js After executing function?
我已经为我的 2 个控制器使用了这项服务(每个控制器都在不同的 html 页面中)。当我单击该函数时,它无法更改我之前设置的默认变量
服务
angular.module('starter.services', [])
.service('ContentSize', function() {
var triggers = [{
count: 1
}];
var counters = [{
index: 0
}, {
index: 1
}, {
index: 2
}];
return {
getCounters: function() {
return counters;
},
getCounter: function() {
for (var i = 0; i < counters.length; i++) {
if (counters[i].index = triggers[0].count) {
return [counters[i].index];
break;
}
}
},
setIndex: function(counter) {
triggers[0].count = counter;
console.log(triggers[0].count);
},
getIndex: function() {
return triggers[0].count;
}
};
});
我放在函数内部的 console.log 运行良好,但是当我把它放在 return 部分之外时,它甚至不显示默认触发器 [0].count。谁能帮我理解这个问题?
//This is the 1st controller :
.controller('cat1Controller' , function($scope, ContentSize) {
//Text Size Declaration for text in page
$scope.textTriggers = [{count: 0, size:2}];
$scope.Index = ContentSize.getIndex();
if ($scope.Index == 0) {
$scope.textTriggers = [{count: 0, size:2}];
console.log('Default');
}
else if ($scope.Index == 1) {
$scope.textTriggers = [{count: 1, size:3}];
console.log('Medium');
}
else {
$scope.textTriggers = [{count: 2, size:4}];
console.log('Large');
}
})
//The2nd Contorller
.controller('ModalController', function($scope, $ionicModal, ContentSize) {
$ionicModal.fromTemplateUrl('templates/settingmodal.html', {
scope: $scope,
animation: 'slide-in-up'
}).then(function(modal) {
$scope.modal = modal;
});
$scope.openModal = function() {
$scope.modal.show();
};
$scope.closeModal = function() {
$scope.modal.hide();
};
$scope.small = function (x) {
ContentSize.setIndex(x);
};
$scope.medium = function (x) {
ContentSize.setIndex(x);
};
$scope.large = function (x) {
ContentSize.setIndex(x);
};
});
如果您将 console.log() 'outside' 放在服务的 return 部分,那么它 将 始终仅被调用一次:服务首次初始化时。那是因为您放在 return 之外的代码仅在服务实例化时执行,这只会发生一次(Angular 服务是单例)。
您 return 从服务中获取的函数(即 getCounters()、getCounter()、setIndex() 和 getIndex())是您正在 return 的服务对象的属性.这些有效地充当您的服务的 API,并且是您的控制器可以自由调用的 'public' 函数。
因此,每当控制器调用其中一个函数时,就会调用这些函数中的任何一个的代码,因此每次函数时都会执行其中一个函数中的 console.log()被调用。
但是这个 returned 服务对象的代码 outside 只被调用一次,这就是为什么 console.log() 在 return call 也只调用一次。
我已经为我的 2 个控制器使用了这项服务(每个控制器都在不同的 html 页面中)。当我单击该函数时,它无法更改我之前设置的默认变量
服务
angular.module('starter.services', [])
.service('ContentSize', function() {
var triggers = [{
count: 1
}];
var counters = [{
index: 0
}, {
index: 1
}, {
index: 2
}];
return {
getCounters: function() {
return counters;
},
getCounter: function() {
for (var i = 0; i < counters.length; i++) {
if (counters[i].index = triggers[0].count) {
return [counters[i].index];
break;
}
}
},
setIndex: function(counter) {
triggers[0].count = counter;
console.log(triggers[0].count);
},
getIndex: function() {
return triggers[0].count;
}
};
});
我放在函数内部的 console.log 运行良好,但是当我把它放在 return 部分之外时,它甚至不显示默认触发器 [0].count。谁能帮我理解这个问题?
//This is the 1st controller :
.controller('cat1Controller' , function($scope, ContentSize) {
//Text Size Declaration for text in page
$scope.textTriggers = [{count: 0, size:2}];
$scope.Index = ContentSize.getIndex();
if ($scope.Index == 0) {
$scope.textTriggers = [{count: 0, size:2}];
console.log('Default');
}
else if ($scope.Index == 1) {
$scope.textTriggers = [{count: 1, size:3}];
console.log('Medium');
}
else {
$scope.textTriggers = [{count: 2, size:4}];
console.log('Large');
}
})
//The2nd Contorller
.controller('ModalController', function($scope, $ionicModal, ContentSize) {
$ionicModal.fromTemplateUrl('templates/settingmodal.html', {
scope: $scope,
animation: 'slide-in-up'
}).then(function(modal) {
$scope.modal = modal;
});
$scope.openModal = function() {
$scope.modal.show();
};
$scope.closeModal = function() {
$scope.modal.hide();
};
$scope.small = function (x) {
ContentSize.setIndex(x);
};
$scope.medium = function (x) {
ContentSize.setIndex(x);
};
$scope.large = function (x) {
ContentSize.setIndex(x);
};
});
如果您将 console.log() 'outside' 放在服务的 return 部分,那么它 将 始终仅被调用一次:服务首次初始化时。那是因为您放在 return 之外的代码仅在服务实例化时执行,这只会发生一次(Angular 服务是单例)。
您 return 从服务中获取的函数(即 getCounters()、getCounter()、setIndex() 和 getIndex())是您正在 return 的服务对象的属性.这些有效地充当您的服务的 API,并且是您的控制器可以自由调用的 'public' 函数。
因此,每当控制器调用其中一个函数时,就会调用这些函数中的任何一个的代码,因此每次函数时都会执行其中一个函数中的 console.log()被调用。
但是这个 returned 服务对象的代码 outside 只被调用一次,这就是为什么 console.log() 在 return call 也只调用一次。