0

HTMLが存在しない名前を参照するたびに通知するように Angular に指示するにはどうすればよいですか?$scope

入力例:

<div ng-controller="MyController">
  {{oops}} <!-- This name does not exist in my $scope -->
</div>

望ましい出力:

<div ng-controller="MyController">
    ERROR: No such name: "oops"
</div>

Django では、これは設定で実現できますTEMPLATE_STRING_IF_INVALID

4

2 に答える 2

7

編集:フィルターでそれを行う...(グローバルになります)

app.filter('undefined', function(){ 
    return function(input, message) {
        return angular.isDefined(input) ? input : message;
    };
});

使用する:

<div ng-controller="MyController">
  {{oops | undefined:'ERROR: No such name: "oops"'}} <!-- This name does not exist in my $scope -->
</div>

これでうまくいくはずです。


これは、それを行うための迅速かつ簡単な方法です...

HTML

<div ng-controller="MyController">
    <span ng-show="isDefined(oops)">{{oops}}</span><span ng-hide="isDefined(oops)">ERROR: No such name: "oops"</span>
</div>

コントローラーで:

app.controller("MyController", function($scope) {
   $scope.isDefined = function(x) {
      return angular.isDefined(x);
   };
});

編集 2:すべてを「自動的に」実行する真の「グローバル」アプローチ...そのためには、Angular の ngBind ディレクティブを書き換えるか、独自のバインディング ディレクティブを作成してどこでも使用することを検討しています。

これは Angular の ngBind ディレクティブで、ここの 50 行目にあります。

var ngBindDirective = ngDirective(function(scope, element, attr) {
  element.addClass('ng-binding').data('$binding', attr.ngBind);
  scope.$watch(attr.ngBind, function ngBindWatchAction(value) {
    element.text(value == undefined ? '' : value); //<-- this is the line.
  });
});

ご覧のとおり、値が定義されていない場合はデフォルトで '' になります。

于 2012-11-29T18:31:40.573 に答える
0

関数が意味するものと同じくらい簡単にできます。リターンは、メッセージまたはその他のロジックを表示するかどうかを決定する必要があります。

  app.filter('isDefined', function () {
    return angular.isDefined;
  });
于 2015-07-13T16:22:57.840 に答える