在过滤器angularjs中使用范围

时间:2014-04-08 20:14:47

标签: angularjs filter angularjs-scope angularjs-filter

我尝试创建过滤器,观看safe并尝试在变量上使用$ compile

现在我可以毫无问题地使用它

.directive('safe', ['$compile',
    function ($compile) {
      return function (scope, element, attrs) {console.log(scope, element, attrs)
        scope.$watch(
          function (scope) {
            // watch the 'safe' expression for changes
            return scope.$eval(attrs.bindUnsafeHtml);
          },
          function (value) {
            // when the 'safe' expression changes
            // assign it into the current DOM
            element.html(value);

            // compile the new DOM and link it to the current
            // scope.
            // NOTE: we only compile .childNodes so that
            // we don't get into infinite loop compiling ourselves
            $compile(element.contents())(scope);
          }
        );
      };
    }
  ])

html文件中上述代码的用法是

<span safe="'_agree_to_terms_and_conditions_'">

现在我希望能够做这样的事情

 {{ gettext("_agree_to_terms_and_conditions_" | safe }}

现在,当我尝试创建filter时,我没有scope可用...

甚至可以实现上述类似的东西吗?

PS。过滤器的名称需要与给定的示例完全匹配,因为我尝试使用不同的i18n应用程序创建函数的常用用法。

1 个答案:

答案 0 :(得分:0)

这似乎是一个坏主意。从filter开始,您不希望以任何方式尝试修改$scope。您可能会因为已经进入$digest周期而遇到错误。但是可以将内容传递到filter

{{ gettext("_agree_to_terms_and_conditions_" | safe:this }}

app.filter('safe', function () {
   return function (input, scope) {
     //scope will be *this* that you passed in from the HTML
   };
});

刚刚找到一篇文章,之前曾问过这个问题:Access scope variables from a filter in AngularJS。他们也提出类似的警告,不要试图修改$scope