是否有一个简写为$看一个布尔表达式在控制器中成为真

时间:2014-05-10 12:18:35

标签: angularjs typescript

有时候我最终会$watch一个布尔表达式在控制器中变为true(进行重定向或属于控制器的其他魔法)。

(打字稿)

$scope.$watch('aComplexBoolean && expressionWith && lotsAstuff', (newValue) => {
    if (newValue) {
        // do my stuff, e.g. redirect etc..
    }
});

我很想知道,AngularJS中是否有可能的简写,我真的想摆脱额外的混乱,只需要调用例如$when('expr', () => { /* do stuff */ })或其他同样好看的东西。

2 个答案:

答案 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要好得多。