AngularJSアプリケーションにいくつかのユーティリティ関数を追加したいと思います。例えば:
$scope.isNotString = function (str) {
return (typeof str !== "string");
}
それらをサービスとして追加するためにこれを行う最良の方法はありますか?私が読んだものからこれを行うことができますが、HTMLページでこれらを使用したいので、サービス内にある場合でも可能ですか?たとえば、以下を使用できますか?
<button data-ng-click="doSomething()"
data-ng-disabled="isNotString(abc)">Do Something
</button>
誰かが私にこれらを追加する方法の例を教えてもらえますか?サービスを作成する必要がありますか、それとも他に方法がありますか?最も重要なのは、これらのユーティリティ関数をファイル内に配置し、メインセットアップの別の部分と組み合わせないようにすることです。
私はいくつかの解決策があることを理解していますが、どれもそれほど明確ではありません。
ソリューション1 -Urbanが提案
$scope.doSomething = ServiceName.functionName;
ここでの問題は、20の機能と10のコントローラーがあることです。これを行うと、各コントローラに多くのコードを追加することになります。
ソリューション2-私が提案
var factory = {
Setup: function ($scope) {
$scope.isNotString = function (str) {
return (typeof str !== "string");
}
これの欠点は、すべてのコントローラーの開始時に、$ scopeを通過した各サービスに対してこれらのセットアップ呼び出しを1つ以上持つことです。
ソリューション3 -Urbanが提案
汎用的なサービスを作成するというアーバンによって提案されたソリューションはよさそうです。これが私の主なセットアップです:
var app = angular
.module('app', ['ngAnimate', 'ui.router', 'admin', 'home', 'questions', 'ngResource', 'LocalStorageModule'])
.config(['$locationProvider', '$sceProvider', '$stateProvider',
function ($locationProvider, $sceProvider, $stateProvider) {
$sceProvider.enabled(false);
$locationProvider.html5Mode(true);
これに汎用サービスを追加する必要がありますか?どのようにすればよいですか?