2015年7月19日日曜日

RestangularでResouce RESTを使用する

RestangularでRailsのresouceを使用する場合
公式で議論はあるみたいですが正式なやり方はよく分かりませんでした。

Restangular.all('config').customGET().then....
以下でもいけるようなので基本下で
Restangular.one('config').get().then....

Angular resouce で saveメソッドを作成

REST Resouces

app.factory('Resources', [ '$resource', function ($resource) {
    return function (url, params, methods) {
        var defaults = {
            show: { method: 'GET', isArray: false },
            index: { method: 'GET', isArray: true},
            update: { method: 'PUT', isArray: false},
            create: { method: 'POST'},
            destroy: { method: 'DELETE'}
        };
        methods = angular.extend(defaults, methods);
        var resource = $resource(url, params, methods);
        resource.prototype.$save = function () {
            if (!this.id) {
                return this.$create();
            }
            else {
                return this.$update();
            }
        };
        return resource;
    };
}]);

 

REST Resouce

railsでのresouce
//RailsのResouce対応
app.factory('Resource', [ '$resource', function ($resource) {
    return function (url, params, methods) {
        var defaults = {
            show: { method: 'GET', isArray: false},
            create: { method: 'POST',isArray: false},
            update: { method: 'PUT',isArray: false},
            destroy: { method: 'DELETE',isArray: false}
        };
        methods = angular.extend(defaults, methods);
        var resource = $resource(url, params, methods);
        resource.prototype.$save = function () {
            if (!this.id) {
                return this.$create();
            }
            else {
                return this.$update();
            }
        };
        return resource;
    };
}]);

使用例

app.factory("Book",['Resources',function (Resources) {
    return Resources( "/books/:id.json", {id: '@id'},{});
}]);

2015年7月1日水曜日

Angularjsでdirective以外でDOMをコンパイルする

directiveの中だけでなくコントローラの中などでも$compileを使ってdomをコンパイルすることができました。

var template = "<custom-button>Hello</custom-button>";
var dom = $compile(template)($scope);
document.getElementById('target').appendChild(dom[0]);