我对“编译的 Angular”部分有点困惑,但如果你在 UWP 项目中有一个 Angular 应用程序,大部分 UWP API 都可以通过 Windows 命名空间访问,来自 WinJS,所以在 Angular 服务/组件中,您可以创建如下函数:
windowsFileSavePicker(source, successCB, errorCB) {
var savePicker = Windows.Storage.Pickers.FileSavePicker();
//savePicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.downloads;
savePicker.fileTypeChoices.insert(source.mimeType, [source.fileName.replace(/^.*([.][^.]*)$/, '$1')]);
savePicker.suggestedFileName = source.fileName;
savePickerHandler = fileSavePickerHandler.bind(undefined, source, successCB, errorCB);
if (platform.isWindowsPhone()) { // Win 8.1
Windows.UI.WebUI.WebUIApplication.addEventListener("activated", savePickerHandler);
savePicker.pickSaveFileAndContinue();
}
else // UWP
savePicker.pickSaveFileAsync().then(savePickerHandler);
}
在几个 Cordova 应用程序中,我使用了这样的 sn-ps(例如,从 Angular 的 main.js 内部):
if (window.WinJS && window.WinJS.Application) {
window.WinJS.Application.onbackclick = function () {
backButtonBehavior();
return true; // return true to prevent app closing
};
}
这对于在浏览器(或任何没有 UWP API 的地方)中测试应用的 Angular 部分可能是有益的。
我从来不需要从 Angular 应用程序内部“通信”到应用程序的外部 UWP 部分(因为我在 Angular 应用程序内做所有事情),但您可以创建一个界面或“马车” UWP 部分中的对象,将其附加到全局命名空间(window;或者可能有一个用于此的 UWP api?),然后通过全局命名空间从 Angular 应用程序内部访问它。