我遇到了綁定工廠和控制器的對象和視圖的問題。AngularJS工廠對象沒有在控制器和視圖上更新
我想獲取用戶選擇的圖片的fileUri。到現在爲止還挺好。問題是我正在將文件的值保存到overlays.dataUrl
。但是我在視圖上引用了它,並沒有更新。 (我檢查和值實際上保存到overlays.dataUrl
可變
這裏不用的settings.service.js
的源代碼:
(function() {
"use strict";
angular
.module("cameraApp.core")
.factory("settingsService", settingsService);
settingsService.$inject = ["$rootScope", "$cordovaFileTransfer", "$cordovaCamera"];
function settingsService($rootScope, $cordovaFileTransfer, $cordovaCamera) {
var overlays = {
dataUrl: "",
options: {
sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
destinationType: Camera.DestinationType.FILE_URI
}
};
var errorMessages = [];
var service = {
overlays: overlays,
selectOverlayFile: selectOverlayFile,
errorMessages: errorMessages
};
return service;
function selectOverlayFile() {
$cordovaCamera.getPicture(overlays.options).then(successOverlay, errorOverlay);
}
//Callback functions
function successOverlay(imageUrl) {
//If user has successfully selected a file
var extension = "jpg";
var filename = getCurrentDateFileName();
$cordovaFileTransfer.download(imageUrl, cordova.file.dataDirectory + filename + '.' + extension, {}, true)
.then(function (fileEntry) {
overlays.dataUrl = fileEntry.nativeURL;
}, function (e) {
errorMessages.push(e);
});
}
function errorOverlay(message) {
//If user couldn't select a file
errorMessages.push(message);
//$rootScope.$apply();
}
}
})();
現在控制器:
(function() {
angular
.module("cameraApp.settings")
.controller("SettingsController", SettingsController);
SettingsController.$inject = ["settingsService"];
function SettingsController(settingsService) {
var vm = this;
vm.settings = settingsService;
activate();
//////////////////
function activate(){
// Nothing here yet
}
}
})();
Finnally上視圖:
<h1>{{vm.settings.overlays.dataUrl}}</h1>
<button id="overlay" class="button"
ng-click="vm.settings.selectOverlayFile()">
Browse...
</button>
每當我改變事實中的值ory,它在視圖中不會改變。
在此先感謝!
在我的指令答案中,當我做'vm.overlay = settingsService.overlay'時,它沒有通過更新。只有當我將更新後的值作爲函數參數傳遞時(在$ on中),並執行:$ on(「overlaysUpdate」,function(event,overlays){ vm.overlays = overlays; }); ' 我得到更新的值...這是正常的嗎? –
@RafaelLourenco這是正確的,除非您不需要通過$ on傳遞更新後的值,否則只需在回調完成後再設置vm.overlay = settingsService.overlay即可。原始變量vm.overlay不會自動更新,因爲這是單例的性質,需要強制更新,無論您是通過傳遞$ on還是僅在您從$ on接收回調後重置它。 – Ohjay44