有时候我最终会$watch
一个布尔表达式在控制器中变为true(进行重定向或属于控制器的其他魔法)。
(打字稿)
$scope.$watch('aComplexBoolean && expressionWith && lotsAstuff', (newValue) => {
if (newValue) {
// do my stuff, e.g. redirect etc..
}
});
我很想知道,AngularJS中是否有可能的简写,我真的想摆脱额外的混乱,只需要调用例如$when('expr', () => { /* do stuff */ })
或其他同样好看的东西。
答案 0 :(得分:2)
不,没有这样的速记,如$rootScope
documentation所示。但您可以通过修改$rootScope
对象来自己创建它:
var myApp = angular.module('MyApp', []);
myApp.run([
'$rootScope',
function ($rootScope)
{
$rootScope.$watchTrue = function (expression, callback)
{
// Here, `this` refers to the scope which called the function
return this.$watch(
expression,
function (newValue, oldValue)
{
if (newValue) {
callback(newValue, oldValue);
}
}
);
};
}
]);
答案 1 :(得分:2)
没有。但我更喜欢使用提前退出而不是包装在if:
中$scope.$watch('aComplexBoolean && expressionWith && lotsAstuff', (newValue) => {
if (!newValue) return;
// do my stuff, e.g. redirect etc..
});
有多个早期退出并且这种模式比包裹if
要好得多。