Как вы получаете Angular.js для работы в приложении для магазина Windows 8? - программирование
Подтвердить что ты не робот

Как вы получаете Angular.js для работы в приложении для магазина Windows 8?

Приложение работает, но 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).

Вот функция вокруг строки 1059 в angular.js:

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(function () {
          ....
      });   

Эти ошибки взяты из тестового приложения, которое я создал после примера списка дел с домашней страницы angular.js.

Теперь что? Согласно бесплатному событию Microsoft, которое я посетил, "легко добавить любую стороннюю инфраструктуру/библиотеку JavaScript в приложение Windows 8". Возможно, я новичок в этом... но я не думаю, что это очень просто!

Можно ли использовать angular.js с приложением Windows 8?

4b9b3361

Ответ 1

Причина в том, что Angular помещает теги html comment <!-- --> для ng-repeat и аналогичных директив. К сожалению, Microsoft считает, что они небезопасны при вводе из Javascript с использованием .innertHTML и не разрешены. Это можно найти здесь:

http://msdn.microsoft.com/en-us/library/windows/apps/hh465388.aspx

Это происходит в строке 1534 в jQLite:

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>&#160;</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 не имеет элемента.

[EDIT] После написания этого ответа я попытался добавить

MSApp.execUnsafeLocalFunction(function () { div.innerHTML = '<div>&#160;</div>' + element });

Это работает! По-видимому, вы должны обернуть все углы в MSApp.execUnsafeLocalFunction, а затем эту строку.

Ответ 2

Я получил его, добавив ng-csp в тег HTML в моем приложении для магазина. Это позволяет использовать политику безопасности контента, которая отключает такие вещи, как "eval". Я использовал jQuery (v2.1.1) и Angular (v1.3.0-beta.13).

Подробнее о ng-csp в Документация AngularJS.

Ответ 3

в моем случае я завернул angularjs с MSApp.execUnsafeLocalFunction, и я использовал только data-ng-repeat вместо ng-repeat