AngularJS-指令控制器的加载速度比应用程序控制器快-值未定义

生长

我有一个发出xhr请求以检索一些数据的控制器。

$scope.mbProductImages = [];

$http.get('product.json').success(function(data) {
    $scope.productDetails = data;
        
    $scope.mbProductImages = $scope['productDetails']['product_images'];
    console.log($scope.mbProductImages);

        for(key in $scope.mbProductImages){
            if ($scope.mbProductImages[key].current == true) {
                $scope.currentImage = $scope.mbProductImages[key]['img_lg'];
            }
        }  
});

我真正需要的是一个指令从$scope.productDetails(通过属性值)从控制器中加载的数据中检索数据,我需要在指令的控制器或链接函数中而不是$ parent控制器中使用此代码...

    $scope.mbProductImages = $scope[$attrs.content][$attrs.object];
    console.log($scope.mbProductImages);

        for(key in $scope.mbProductImages){
            if ($scope.mbProductImages[key].current == true) {
                $scope.currentImage = $scope.mbProductImages[key]['img_lg'];
            }
        }

其中,$scope[$attrs.content][$attrs.object];在该指令相当于$scope.productDetails从控制器...

所以我的控制器应该只有这个:

    $http.get('product.json').success(function(data) {
        $scope.productDetails = data;
    }

而我指令的控制器将具有其他代码。

问题

我的朋克:http ://plnkr.co/edit/xErYnlj04P5LQsMedVWi?p=preview

发生的是,获取数据的父控制器xhr请求花费的时间比加载指令所需的时间长,所以我留下了 $scope.mbProductImages 未定义的信息

我怎样才能使指令等待来自控制器的数据加载或检查何时从指令加载数据,然后应用该值?

更新资料

在@Chandermani的大力帮助下,我能够看到我的错误并提出了一个好的解决方案。

控制器:

app.controller('MainCtrl', function($scope, $http) {
  $http.get('mydata.json').success(function(data) {
    $scope.productDetails = data;
    console.log($scope.productDetails);
  });

});

指示:

app.directive("myImages", function() {
return {
restrict: "E",
scope: true,
templateUrl: "template.html",
compile: function(element, attrs) {
  return function(scope, element, attrs) {
    scope.myContent = attrs.content;
    scope.myObject = attrs.object;
    scope.$watch(scope.myContent,function(newValue,oldValue){
      if(newValue) {
        scope.mbProductImages = newValue[scope.myObject];
        console.log(scope.mbProductImages);
        for(key in scope.mbProductImages){
         if (scope.mbProductImages[key].current == true) {
            scope.currentImage = scope.mbProductImages[key]['img_lg'];
         }
        } 
      }
    })
  }; // return

} // compile
}
});
尚德马尼

您不必等待指令,而是使用监视范围变量的变化scope.$watch

您的监视表达式应指向您要监视的属性。就像是

$scope.$watch($attrs.content + $attrs.object, function(newValue,oldValue) {
   if(newValue) {
          //your logic here
   }
});

watch的第一个参数应该是您要观看的对象的属性的路径。

更新:我已尝试修复您的plunkr,看看是否有帮助http://plnkr.co/edit/fKJ2nZcytKubC9JjiaTS?p=preview我基本上已经对productDetails财产进行了监视

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在控制器中未定义AngularJS模态对话框表单对象

来自分类Dev

AngularJS指令控制器解析插值属性?

来自分类Dev

从指令调用时,Typescript Angularjs控制器作用域未定义

来自分类Dev

AngularJS分离控制器,参数不是函数,它是未定义的

来自分类Dev

AngularJS控制器显示未定义?

来自分类Dev

定义控制器-angularjs

来自分类Dev

AngularJS:控制器中未定义工厂函数

来自分类Dev

AngularJS-未定义的控制器

来自分类Dev

AngularJS-解析值在ui路由器中定义,但在控制器中未定义

来自分类Dev

找不到AngularJS控制器,未定义

来自分类Dev

AngularJS应用程序组件(模块,工厂,控制器)定义到底如何工作?

来自分类Dev

AngularJS TypeScript控制器类指令中未定义作用域变量

来自分类Dev

RAILS:会话未在应用程序控制器中包含的模块中定义

来自分类Dev

从指令AngularJS更改控制器作用域值

来自分类Dev

控制器未定义AngularJS

来自分类Dev

在AngularJS指令中使用控制器中的ajax请求未定义作用域

来自分类Dev

AngularJS。在整个应用程序中使用来自不同控制器的值/范围

来自分类Dev

如何在应用程序控制器中定义helper_method

来自分类Dev

AngularJS 1.3.7中未定义控制器

来自分类Dev

在Angularjs自定义指令中隔离控制器

来自分类Dev

AngularJS控制器不是函数,未定义

来自分类Dev

angularjs指令+在多个控制器中应用范围值

来自分类Dev

angularjs控制器访问指令作用域值

来自分类Dev

AngularJS:使用Jasmine与控制器测试指令时控制器未定义

来自分类Dev

AngularJS显示了控制器的未定义函数

来自分类Dev

未定义requirejs angularjs控制器

来自分类Dev

Angularjs 控制器方法 arg 未定义

来自分类Dev

AngularJS:指令将对象添加到 $scope 但在控制器中未定义

来自分类Dev

AngularJS:未为控制器定义应用程序

Related 相关文章

  1. 1

    在控制器中未定义AngularJS模态对话框表单对象

  2. 2

    AngularJS指令控制器解析插值属性?

  3. 3

    从指令调用时,Typescript Angularjs控制器作用域未定义

  4. 4

    AngularJS分离控制器,参数不是函数,它是未定义的

  5. 5

    AngularJS控制器显示未定义?

  6. 6

    定义控制器-angularjs

  7. 7

    AngularJS:控制器中未定义工厂函数

  8. 8

    AngularJS-未定义的控制器

  9. 9

    AngularJS-解析值在ui路由器中定义,但在控制器中未定义

  10. 10

    找不到AngularJS控制器,未定义

  11. 11

    AngularJS应用程序组件(模块,工厂,控制器)定义到底如何工作?

  12. 12

    AngularJS TypeScript控制器类指令中未定义作用域变量

  13. 13

    RAILS:会话未在应用程序控制器中包含的模块中定义

  14. 14

    从指令AngularJS更改控制器作用域值

  15. 15

    控制器未定义AngularJS

  16. 16

    在AngularJS指令中使用控制器中的ajax请求未定义作用域

  17. 17

    AngularJS。在整个应用程序中使用来自不同控制器的值/范围

  18. 18

    如何在应用程序控制器中定义helper_method

  19. 19

    AngularJS 1.3.7中未定义控制器

  20. 20

    在Angularjs自定义指令中隔离控制器

  21. 21

    AngularJS控制器不是函数,未定义

  22. 22

    angularjs指令+在多个控制器中应用范围值

  23. 23

    angularjs控制器访问指令作用域值

  24. 24

    AngularJS:使用Jasmine与控制器测试指令时控制器未定义

  25. 25

    AngularJS显示了控制器的未定义函数

  26. 26

    未定义requirejs angularjs控制器

  27. 27

    Angularjs 控制器方法 arg 未定义

  28. 28

    AngularJS:指令将对象添加到 $scope 但在控制器中未定义

  29. 29

    AngularJS:未为控制器定义应用程序

热门标签

归档