recursos para criacao de aplicacoes que funcionam a partir de uma unica pagina (Simple Page Applications). Os principais recursos do AngularJS sao descritos a seguir.Data BindingNo Angular existem dois tipos de instrucoes que podem ser utilizadas para exibir informacoes na tela de usuario. Um delas se da por meio do atributo ng-bind-html e a outra forma e atraves de chaves, {{}}. Nas duas formas, o AngularJS vai interpretar a expressao e atualizar o conteudo no DOM. Alem disso, o AngularJS possui uma caracteristica denominada two-way data bind que corresponde ao fato do $scope service atualizar expressoes no HTML apos detectar alteracoes no modelo. O exemplo abaixo demonstra o conceito de two-way data binding.MVCSobre este modelo de arquitetura nao sera dado tanto enfoque pois se trata de um conceito bem entendido pela comunidade Web. Na verdade, o AngularJS estende o conceito do MVC para o MVW (Model View Whatever). A questao e saber que o AngularJS adota este conceito isolando cada conjunto de funcionalidades e de dados no seu arquivo especifico. Esta separacao de funcionalidades se da por meio de entidades, interfaces de usuario, controladores e se estende ainda aos servicos. RoutingO routing tem muita relacao com os padroes de nomenclatura de URL. Situacao que era solucionada no passado com as re-escritas de URL. Mas alem disso, o routing permite a implementacao de deep links, associacao de uma determinada rota ao seu controlador. As rotas devem ser especificadas no arquivo principal de scripts da aplicacao conforme o exemplo abaixo.1234567891011HelloApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/hello/:name', { templateUrl: 'hello.html', controller: 'HelloCtrl' }). otherwise({ redirectTo: '/' }); }]);TestingNo AngularJS e possivel utilizar tantos os testes unitarios quantos os testes de integracao (end-to-end). Para crias testes e necessario a utilizacao de ferramentas apropriadas. No caso dos testes unitarios uma boa opcao e utilizar o Jasmine (behavior-driven development framework para testar codigo JavaScript), alem deste pode ser utilizado tambem o Mocha e o QUnit. Para escrever os testes de integracao, estao disponiveis o Protractor (framework que realiza testes sobre a aplicacao como se fosse um usuario), o Karma (Test Runner for JavaScript) e o CasperJS.jqLiteO jqLite e uma API que contem alguns metodos que sao compativeis com o JQuery. Apenas os metodos mais significativos foram adicionados a API. Estes metodos possibilitam que o AngularJS faca manipulacao no DOM. Este recurso so e utilizado quando o JQuery nao esta disponivel na aplicacao. Templates Os templates sao criados no HTML com elementos e atributos do Angular. Estao inclusos neste conceito as diretivas, marcacoes que indicam expressoes {{}}, filtros e controle de formulario com validacoes. O index.html e por padrao o template principal da aplicacao.History O historico de navegacao e provido pelo $location service, mas nao e apenas isto: o location conta com um conjunto de metodos que interage com a navegacao da aplicacao no browser podendo tanto observar elementos na URL quanto setar seus valores.FactoriesOs factories sao registrados com o module e sao responsaveis pela criacao da maioria dos objetos no AngularJS. E possivel utilizar uma factorie para disponibilizar informacoes temporarias para todos os escopos da aplicacao.viewModelConceito que representa um modelo