Javascript 如何将异步变量从控制器传递到angularjs中的指令
我是angular的新手,正在努力将通过http资源在控制器中检索到的变量传递到指令中。首先我有一个问题,我的ngResource调用是异步的,然后我还有一个问题,我的资源调用是链接的 这是我的htmlJavascript 如何将异步变量从控制器传递到angularjs中的指令,javascript,angularjs,asynchronous,Javascript,Angularjs,Asynchronous,我是angular的新手,正在努力将通过http资源在控制器中检索到的变量传递到指令中。首先我有一个问题,我的ngResource调用是异步的,然后我还有一个问题,我的资源调用是链接的 这是我的html <html ng-app="routingRulesApp"> <body ng-controller="RulesDisplayCtrl"> <my-customer info="$activeRuleSetId"></my-customer&
<html ng-app="routingRulesApp">
<body ng-controller="RulesDisplayCtrl">
<my-customer info="$activeRuleSetId"></my-customer>
</body>
</html>
我正试图在指令控制器中获取$scope.formattedResults变量,以便构建自定义表/网格解决方案,但我不确定如何实现这一点。正如你所看到的,我非常迷路。我尝试使用延迟对象,希望它能绑定到一个变量。这不是一个代码,但我需要向您介绍一些角度 要实现您的目标:
- 您需要一个控制器或一个调用异步函数的服务(从控制器中预传递和调用)
- 使用来自异步的结果的指令
- 关闭。学会使用并做一些很棒的事情
- 可变项。共享(分配)一个不可变的变量(整数、字符串)不会有帮助。更具体地说: 由于承诺为一个变量设置了一个值,该值是可变的(例如dict),因此如果指令通过作用域访问该变量,或者如讨论的那样,当异步承诺返回时,如果您更新dict而不重置它,您的指令将具有正确的值。注意这一点
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"}
});
}]);