该应用程序正在运行,但无法识别Angular数据对象。
这是我得到的JavaScript错误:
Exception was thrown at line 1059, column 11 in ms-appx://28934b41-4dd2-4414-b9a9- a73c11c1b743/js/angular.js 0x800a139e - JavaScript runtime error: No module: ngLocale Exception was thrown at line 4473, column 9 in ms-appx://28934b41-4dd2-4414-b9a9- a73c11c1b743/js/angular.js 0x800a139e - JavaScript runtime error: HierarchyRequestError The program '[5112] WWAHost.exe' has exited with code 1 (0x1).
这是angular.js中1059行附近的函数:
return ensure(modules, name, function() { if (!requires) { throw Error('No module: ' + name); }
这是围绕4473行的函数:
if (parent) { parent.replaceChild(newNode, oldNode); }
我能够解决遇到的第一个错误:
Unhandled exception at line 2031 JavaScript runtime error: Unable to add dynamic content
通过包装所有angular.js与 MSApp.execUnsafeLocalFunction
MSApp.execUnsafeLocalFunction
MSApp.execUnsafeLocalFunction(function () { .... });
这些错误来自我按照Angular.js主页上的待办事项列表示例创建的测试应用程序。
怎么办?根据我参加的一个免费的Microsoft活动,“很容易将任何第三方JavaScript框架/库添加到Windows 8应用程序中!” 我可能对此并不陌生…但是我认为这并不容易!
甚至可以在Windows 8应用程序中使用Angular.js吗?
原因是因为Angular <!-- -->为ng- repeat和类似的指令放置了html注释标签。不幸的是,Microsoft认为使用.innertHTML从Javascript插入这些文件是不安全的,因此是不允许的。可以在这里找到:
<!-- -->
http://msdn.microsoft.com/zh- CN/library/windows/apps/hh465388.aspx
它发生在jQLite的1534行:
var div = document.createElement('div'); // Read about the NoScope elements here: // http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx div.innerHTML = '<div> </div>' + element; // IE insanity to make NoScope elements work! div.removeChild(div.firstChild); // remove the superfluous div
发生什么是元素
<!-- ngRepeat: item in arrayTest -->
然后当angular div.innerHTML = …时,该元素将被删除。如果在div.removeChild处放置一个断点,您会注意到div.innerHTML没有元素。
[编辑]写完此回复后,我尝试添加
MSApp.execUnsafeLocalFunction(function () { div.innerHTML = '<div> </div>' + element });
有用!显然,您必须将所有angularjs包装在MSApp.execUnsafeLocalFunction中,然后专门包装该行。