Javascript 为特定函数复制ng if
我正在尝试为AngularJS应用程序创建一个指令。它的用法如下:Javascript 为特定函数复制ng if,javascript,angularjs,Javascript,Angularjs,我正在尝试为AngularJS应用程序创建一个指令。它的用法如下: <div requires-permissions="['permission_1', ...]"> This should only show if the user has appropriate permissions. </div> 每个控制器都需要一个对用户服务的引用。我已经看了一遍了,我不能理解代码的头尾 我非常确定我可以使用jqlite的remove函数删除元素。我以后怎么才能替换它呢
<div requires-permissions="['permission_1', ...]">
This should only show if the user has appropriate permissions.
</div>
每个控制器都需要一个对用户服务的引用。我已经看了一遍了,我不能理解代码的头尾
我非常确定我可以使用jqlite的remove函数删除元素。我以后怎么才能替换它呢?我已经为您的需要实现了类似的功能,它调用了
experitif
export function experimentIf(ngIfDirective, experimentsManager) {
const ngIf = ngIfDirective[0];
const NAME = 'experimentIf';
return {
restrict: ngIf.restrict,
priority: ngIf.priority + 1,
terminal: ngIf.terminal,
transclude: ngIf.transclude,
link: function ($scope, $element, $attr) {
const experimentName = $attr[NAME];
$attr.ngIf = function () {
return experimentsManager.isExperimentEnabled(experimentName);
};
ngIf.link.apply(ngIf, arguments);
}
};
}
基本上,它在需要时重用ng if的配置,并且只更改断言部分。
在我的例子中,是使用experimentsManager
服务
当您注入
ngIfDirective
时,就会出现神奇的效果,这似乎很有效。谢谢链接功能是否在每个摘要周期上运行?也就是说,在您的示例中,更改ExperimentManager的状态是否会影响experiementIf指令?在我的示例中,experiment无法在运行时更改其值,因此我没有检查它。您可以使用attribute.observ检查attibuye是否已更改。
export function experimentIf(ngIfDirective, experimentsManager) {
const ngIf = ngIfDirective[0];
const NAME = 'experimentIf';
return {
restrict: ngIf.restrict,
priority: ngIf.priority + 1,
terminal: ngIf.terminal,
transclude: ngIf.transclude,
link: function ($scope, $element, $attr) {
const experimentName = $attr[NAME];
$attr.ngIf = function () {
return experimentsManager.isExperimentEnabled(experimentName);
};
ngIf.link.apply(ngIf, arguments);
}
};
}