angular.module('app').controller('FooController', FooController);
FooController.$inject = ['$service1', '$service2'];
function FooController($service1, $service2) {}
angular.module('app').controller('FooController', FooController);
/*@ngInject*/
function FooController($service1, $service2) {}
<a href="{{x.url}}">
не сработает. Нужна директива ng-href.function myService($http, $log) {
return {
addLink: addLink,
getLinks: getLinks
};
function addLink(data) {
$http.post('/api/links', data)
.then(function (response) {
$log.log('Success', response);
});
}
function getLinks() {
$http.get('/api/links')
.then(function (response) {
return response.data.records;
});
}
}
function MainController(myService) {
var vm = this;
vm.addLink = addLink;
function fetch() {
return myService.getLinks()
.then(function (links) {
vm.links = links;
});
}
function addLink() {
return myService.addLink({
'linkname': vm.linkname,
'url': vm.url
})
.then(function () {
vm.linkname = '';
vm.url = '';
return fetch();
});
}
}
angular.module('app', [])
.factory('myService', myService)
.controller('MainController, MainController');
<div ng-controller="MainController as main">
<form ng-submit="main.addLink()">
Name: <input type="text" ng-model="main.linkname"><br>
URL: <input type="text" ng-model="main.url">
</form>
<hr>
<ul>
<li ng-repeat="item in main.links">
<a ng-href="{{ item.url }}">{{ item.linkname }}</a>
</li>
</ul>
</div>
$http.post('/api/item', item) // делаем запрос к API
.then(function (response) { // чейним промис от $http
// этот код начнёт выполняться только после успешного ответа от сервера
// в параметре response будут данные ответа: HTTP-код ответа, данные из тела ответа и т.д.
console.log(response); // обрабатываем ответ от сервера, если надо
return $state.go('item.list'); // переход на страницу
});
#include <stdio.h>
int digit(int number, int n) {
if (n <= 1) {
return number % 10;
}
return digit(number / 10, n - 1);
}
int main(void) {
printf("%i\n", digit(12345, 1));
printf("%i\n", digit(12345, 2));
printf("%i\n", digit(12345, 3));
printf("%i\n", digit(12345, 4));
return 0;
}
// Application.java
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import javax.servlet.Servlet;
class Application implements Runnable {
Server server;
ServletContextHandler handler;
public Application() {
server = new Server(8080);
handler = new ServletContextHandler(ServletContextHandler.SESSIONS);
server.setHandler(handler);
}
@Override
void run() {
try {
server.start();
server.join();
} finally {
server.destroy();
}
}
void addServlet(String path, Servlet servlet) {
handler.addServlet(new ServletHolder(servlet), path);
}
void addServlet(String path, Class<? extends Servlet> servletClass) {
handler.addServlet(new ServletHolder(servletClass), path);
}
}
// Main.java
import org.eclipse.jetty.servlet.DefaultServlet;
public class Main {
public static void main(String args[]) {
Application app = new Application();
app.handler.setContextPath("/");
app.handler.setResourceBase(Main.class.classLoader.getResource("webapp").toExternalForm());
app.handler.addServlet("/*", DefaultServlet.class);
app.handler.addServlet("/api/v1/*", JerseyServlet.class);
app.handler.addServlet("/ws/*", WSServlet.class);
app.run();
}
}
apply plugin:'application'
...
mainClassName = "your.package.app.Main"
transaction-type="JTA
. Иначе транзакциями вручную будешь рулить. Достаточно лишь получить транзакцию, ну и начать/закоммитить/сделать роллбек. Менеджер транзакций уже настроен. Если не используешь EJB, а обходишься спрингом, то в нём есть свой менеджер трнзакций, хз, надо ли его отдельно конфигурить.<div class="b-rewiews__rewiew-name b-rewiews__rewiew-name--form row">
<div class="col-sm-6">
<div class="row">
<div class="b-rewiews__group col-md-2 col-sm-6 col-xs-12"></div>
<div class="b-rewiews__group col-md-2 col-sm-6 col-xs-12"></div>
</div>
</div>
<div class="col-sm-6">
<div class="row">
<div class="b-rewiews__social-login col-md-2 col-sm-6 col-xs-12"></div>
<div class="b-rewiews__rating-input b-rewiews__rating-input--no-autorized col-md-1 col-sm-6 col-xs-12"></div>
</div>
</div>
</div>
arr.push(() => {
return Promise.resolve(item); // Все промисы вернут C
});
let item;
for (let i = 0, len = 3; i < len; i++) {
((item) => {
item = arrOfItems[i];
arr.push(() => {
return Promise.resolve(item);
});
})(item);
}
for (let i = 0, len = 3; i < len; i++) {
((idx) => { // это для наглядности, её тоже можно назвать i и тогда она "затенит" внешнюю i
let item = arrOfItems[idx];
arr.push(() => {
return Promise.resolve(item);
});
})(i);
}
1) Это все синхронные операции, т.е. Эвент машина JavaScript'а должна выполнить их в одной итерации, но при этом for ведет себя как асинхронная операция, т.е. сначала перебирает все варианты, а потом уже пушит их.
2) Какие из операций JS являются асинхронными?
3) В каких случаях нужно использовать замыкания помимо циклов?
4) Почему если объявить переменную в цикле, она ведет себя как будто она в замыкании, ведь на самом деле итерируется не она сама, а i?