サービスと$リソースを使用してREST APIを検索し、その結果をコントローラーに渡すための指令を作成しました。コードは次のようになります。コントローラー関数から指令を呼び出してもスコープが更新されない
app.controller('productsCtrl', ['$scope', function ($scope) {
var self = this;
self.selection;
self.searched = function (selected) {
self.selection = selected;
};
}]);
app.service('productsService', ['productsResource', function (productsResource) {
var self = this;
self.findProducts = function (search) {
return productsResource.query({
sku: search
});
};
}]);
app.factory('productsResource', ['$resource', function ($resource) {
return $resource('products/:sku', {
id: '@sku'
});
}]);
app.directive('productSearch', ['productsService', function (productsService) {
return {
restrict: 'E',
scope: {
productSelected: '&'
},
templateUrl: '/products/product_search.html',
link: function (scope) {
scope.findProducts = function (search) {
scope.searchResults = productsService.findProducts(search);
};
scope.selectResult = function (selected) {
scope.selection = selected;
scope.showResults = false;
};
}
};
}]);
関連するHTMLの行は、次のとおりです。
<div ng-show='products.selection'>
{{products.selection.name}} //does not update
</div>
とディレクティブのテンプレートから
は:<div ng-click="productSelected({selected: selection})"></div>
は、問題は私のモデルが更新されないときのディレクティブコントローラメソッドを呼び出します(最後の検索結果が表示されます)。そこには「角張った」機能が呼び出されていないので、私には分かります。しかし、どうすればこれを動作させることができますか?私は$scope.$apply()
で試しましたが、それはエラーを投げます。
私はそれを正しくやっているのですか?これは角度的な方法ですか?特に、ディレクティブ内のサービスを使用し、ディレクティブからコントローラに物事を渡すか?
編集:私はあなたがディレクティブからのコールバックが欠けていると思う
<div>
<product-search product-selected='products.searched(selected)'></product-search>
<div ng-show='products.selection'>
{{products.selection.name}}
</div>
</div>
ディレクティブを使用している場所でhtmlを表示できますか? –