Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 指令Angularjs中未定义的值_Javascript_Ajax_Angularjs - Fatal编程技术网

Javascript 指令Angularjs中未定义的值

Javascript 指令Angularjs中未定义的值,javascript,ajax,angularjs,Javascript,Ajax,Angularjs,我正在尝试使用来自ajax调用的数据创建一个指令,我的问题是在创建该指令时数据未定义,因为ajax仍在加载,我知道使用setTimeout来验证这一点,并使用$scope.apply()可以工作,但这似乎不是一个好方法,也尝试将$watch添加到标记ajaxLoading中,但它不起作用 pmApp.directive("filter", function () { return { restrict: "A", scope: {

我正在尝试使用来自ajax调用的数据创建一个指令,我的问题是在创建该指令时数据未定义,因为ajax仍在加载,我知道使用setTimeout来验证这一点,并使用$scope.apply()可以工作,但这似乎不是一个好方法,也尝试将$watch添加到标记ajaxLoading中,但它不起作用

pmApp.directive("filter", function () {
    return {
        restrict: "A",
        scope: {
            data: '=',
            ngModel: '=',
            display: '='
        },
        templateUrl: "views/template.html",
        link: function (scope, element, attrs) {
            var value = attrs.value,
                scopeParent = scope.$parent,
                model = attrs.ngModel;

            scope.description = attrs.description;
            scope.value = value;

            window.setTimeout(function() {
                scope.ngModel = scope.data[0][value];
                scope.$apply();
            }, 2000);


        }
    }
});

无论您使用什么方法进行ajax调用,它都应该返回一个承诺。将此承诺保存在控制器上,并将其传递到指令作用域配置中,以便指令可以访问它

现在,您可以使用promise延迟变量赋值,而不是
setTimeout


但是作为一般建议,您应该使用内置的,而不是
setTimeout
,这样您就不必担心摘要周期了。有关详细信息,请访问。

ajax调用在哪里?在ajax调用填充的数据对象上添加一个监视。由于您使用的是独立作用域,因此需要传递使用ajax填充的数据对象。@Chandermani如何传递数据对象?您已经在
data
变量中传递了它。查看
data
上的
watch
是否在指令内工作。数据对象的结构是什么?