Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 directve链接作用域在ng模板上重复_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS directve链接作用域在ng模板上重复

Javascript AngularJS directve链接作用域在ng模板上重复,javascript,angularjs,Javascript,Angularjs,在本指令中: (function(){ var app = angular.module('hrefDirective',['productosService']); app.directive('customHref', ['productosService', function(productosService) { return { restrict: 'EA', template: '<li ng-r

在本指令中:

(function(){
    var app = angular.module('hrefDirective',['productosService']);

    app.directive('customHref', ['productosService', function(productosService) {
        return {
            restrict: 'EA',
            template: '<li ng-repeat="familia in getfamilias"><p><a ng-bind="familia.name" ng-href="{{familia.href}}"></a></p></li>',           
            link : function(scope, element, attrs){
                productosService.getFamilias().then(function(data){
                    scope.getfamilias = data.data;
                    for(var t in scope.getfamilias){
                        productosService.getFinalFamilias(scope.getfamilias[t].id).then(function(result){
                            scope.getfamilias[t].href = result.data.rows == 0 ? '#/producto' : '#/productos/{{familia.name}}';
                        });
                    }                               
                });
            }
        };
    }]);    
})();
在链接中,我通过一个服务获取原始getfamilias对象,并在一个新服务中使用id属性来获取一个新的属性,并将其推送到原始getfamilias对象以在模板中用作href,但它不起作用


关于如何获取模板值的任何线索?

您的代码中有一些错误,因此我建议您使用以下方法:

 app.directive('customHref', ['productosService', function(productosService) {
        return {
            restrict: 'EA',
            template: '<li ng-repeat="familia in getfamilias"><p><a ng-bind="familia.name" ng-href="{{familia.href}}"></a></p></li>',           
            link : function(scope, element, attrs){
                productosService.getFamilias().then(function(data){
                    // you have to make sure your data.data has a collection, I don't know your complete code, 
                    // so I'm just leaving this part as it is. 
                    scope.getfamilias = data.data;

                    //Use angular.forEach instead of for(x in y)
                    angular.forEach(scope.getfamilias, function(familia){
                        productosService.getFinalFamilias(familia.id).then(function(result){

                            // render the name here instead of using '#/productos/{{familia.name}}'
                            familia.href = result.data.rows === 0 ? '#/producto' : '#/productos/' + familia.name ;
                        });
                    });                              
                });

            }
        };
    }]);
app.directive('customHref',['productosService',function(productosService){
返回{
限制:“EA”,
模板:“
  • ”, 链接:函数(范围、元素、属性){ productosService.getFamilias().then(函数(数据){ //你必须确保你的数据。数据有一个集合,我不知道你的完整代码, //所以我就不谈这部分了。 scope.getfamilias=data.data; //使用angular.forEach而不是for(x in y) angular.forEach(scope.getfamilias,函数(familia){ productosService.getFinalFamilias(familia.id).then(函数(结果){ //在此处呈现名称,而不是使用“#/productos/{{familia.name}” familia.href=result.data.rows==0?“#/producto”:“#/productos/”+familia.name; }); }); }); } }; }]);
    我给你做了一个扑通,请看一下:


    在服务呼叫中,然后回拨。为什么不检查一下什么是
    t
    ?嗨,请看一下我的答案。我已经做了一个plunkr,并试图用固定的值来模拟您服务的响应。很好的回答,也许你们可以提及在OPs案例中实际发生的事情,以便OPs理解+为了额外的努力。
     app.directive('customHref', ['productosService', function(productosService) {
            return {
                restrict: 'EA',
                template: '<li ng-repeat="familia in getfamilias"><p><a ng-bind="familia.name" ng-href="{{familia.href}}"></a></p></li>',           
                link : function(scope, element, attrs){
                    productosService.getFamilias().then(function(data){
                        // you have to make sure your data.data has a collection, I don't know your complete code, 
                        // so I'm just leaving this part as it is. 
                        scope.getfamilias = data.data;
    
                        //Use angular.forEach instead of for(x in y)
                        angular.forEach(scope.getfamilias, function(familia){
                            productosService.getFinalFamilias(familia.id).then(function(result){
    
                                // render the name here instead of using '#/productos/{{familia.name}}'
                                familia.href = result.data.rows === 0 ? '#/producto' : '#/productos/' + familia.name ;
                            });
                        });                              
                    });
    
                }
            };
        }]);