我如何将异步变量从控制器传递到AngularJS中的指令



我是Angular的新手,并且正在努力将我通过HTTP资源通过HTTP资源检索到我的指令中的变量。首先,我有一个问题,即我的ngresource调用是异步的,然后我还有一个问题,即我的资源调用被链接了。

这是我的HTML

<html ng-app="routingRulesApp">
<body ng-controller="RulesDisplayCtrl">
    <my-customer info="$activeRuleSetId"></my-customer>
</body>
</html>

这是我的JavaScript

var routingRulesApp = angular.module('routingRulesApp', [
  'routingRulesControllers',
  'routingRulesServices',
  'routingRulesDirectives'
]);
var routingRulesControllers = angular.module('routingRulesControllers', []);
routingRulesControllers.controller('RulesDisplayCtrl', ['$scope', 'RuleSets', '$q',
    function($scope, RuleSets, $q) {
        var fr = null;
        var rpromise = $q.defer();
        $scope.activeRuleSetId = RuleSets.active({ruleId: 1}, function(activeRuleSetId) {
            var ruleSetId = activeRuleSetId[0];
            var ruleSet = RuleSets.query({ruleSetId: ruleSetId}, function(ruleSet) {
                console.log(ruleSet);
                fr = ruleSet;
                rpromise.resolve(fr);
            }, function(response) {
                //404 or bad
                if(response.status === 404) {
                    console.log("HTTP Error", response.status);
                }
            });

        }, function(response) {
            //404 or bad
            if(response.status === 404) {
                console.log("HTTP Error", response.status);
            }
        });
        $scope.formattedResults = rpromise.promise;
    }
]);
var routingRulesDirectives = angular.module('routingRulesDirectives', []);
routingRulesDirectives.directive('myCustomer', [
    function() {
        return {
            restrict: 'E',
            replace: true,
            scope: {
                formattedResults: '=info'
            },
            templateUrl: 'templates/currency-group-rule.html',
            controller: function($scope) {
                console.log($scope.formattedResults);
                debugger;
            }
        };
    }
]);
var routingRulesServices = angular.module('routingRulesServices', ['ngResource']);
routingRulesServices.factory('RuleSets', ['$resource',
    function($resource){
        return $resource('data/routing-ruleset-:ruleSetId.json', {}, {
            query: {method:'GET', isArray:true},
            active: {method:'GET', isArray: false, url: 'data/rulesets-activeRuleSetId.json', responseType:"text"}
        });
    }]);

我正在尝试抓住我的$ scope.formattedresults变量,以便我可以构建自定义的表/网格解决方案,但是我不确定如何实现这一目标。如您所见,我非常迷路。我试图使用递延对象,并希望它可以绑定到变量。

嗯,这不是代码回答这个问题,但我需要指导您一些角度。

实现您的目标:

  • 您需要一个调用异步函数的控制器或服务(从控制器中调用和调用)。
  • 使用异步的结果的指令。

我可以迅速想到两种方式。

  1. 注入控制器和指令的服务(可能具有不同的范围)。完成异步调用后,两个范围都将通过Angular提供的数据绑定具有变量集。
  2. 控制器本身具有异步功能,并共享范围或广播变量或iHerit等。

现在,您不必忘记角度的端子上的一些关键点。

  • 关闭。学习使用并做很棒的事情
  • 突变。共享(分配)一个不变的变量(整数,字符串)不会有所帮助。更具体:由于承诺将值设置为值可变的变量(例如)更新命令而不是重置。注意这一点。

可能您知道其中的大多数,并且确保谷歌搜索会给您带来很多S.O.内容的问题可以解释上述内容,并且可能会更好。也许有人也可以给您一些与代码有关的答案。

祝你好运。

最新更新