我尝试创建过滤器,观看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应用程序创建函数的常用用法。
答案 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
。