69

私はAngularJSを初めて使用しますが、これまで見てきたもの、特にモデル/ビュー バインディングが気に入っています。それを利用して、単純な「バスケットに追加」機能を構築したいと思います。

これはこれまでの私のコントローラーです:

function BasketController($scope) {
    $scope.products = [];

    $scope.AddToBasket = function (Id, name, price, image) {

        ...

    };
}

そして、これは私のHTMLです:

<a ng-click="AddToBasket('237', 'Laptop', '499.95', '237.png')">Add to basket</a>

これで動作しますが、これが私のモデルで新しい製品オブジェクトを作成する正しい方法であるとは思えません。しかし、これは、AngularJS の経験がまったくない私の出番です。

これがその方法でない場合、ベストプラクティスは何ですか?

4

3 に答える 3

86

外側の div でng-initを使用できます。

<div ng-init="param='value';">
    <div ng-controller="BasketController" >
        <label>param: {{value}}</label>
    </div>
</div>  

パラメーターは、コントローラーのスコープで使用できるようになります。

function BasketController($scope) {
        console.log($scope.param);
}
于 2012-10-25T19:16:34.160 に答える
65

バスケット サービスを作成できます。また、一般的に JS では、多くのパラメーターの代わりにオブジェクトを使用します。

例を次に示します: http://jsfiddle.net/2MbZY/

var app = angular.module('myApp', []);

app.factory('basket', function() {
    var items = [];
    var myBasketService = {};

    myBasketService.addItem = function(item) {
        items.push(item);
    };
    myBasketService.removeItem = function(item) {
        var index = items.indexOf(item);
        items.splice(index, 1);
    };
    myBasketService.items = function() {
        return items;
    };

    return myBasketService;
});

function MyCtrl($scope, basket) {
    $scope.newItem = {};
    $scope.basket = basket;    
}
于 2012-07-28T20:29:04.007 に答える