Angularjs 控制器和指令,优先级
我和Angularjs在一起几天了,我正在努力解决一些问题。我会尽我最大的努力解释这个问题是什么,我真的很感激任何人能在这方面给我的帮助 我的情况(简化)如下: 我有一个服务,它从json加载一些信息并将其存储在一个对象中。它还具有一些用于其他控制器检索该信息的功能Angularjs 控制器和指令,优先级,angularjs,angularjs-directive,angularjs-service,angularjs-controller,Angularjs,Angularjs Directive,Angularjs Service,Angularjs Controller,我和Angularjs在一起几天了,我正在努力解决一些问题。我会尽我最大的努力解释这个问题是什么,我真的很感激任何人能在这方面给我的帮助 我的情况(简化)如下: 我有一个服务,它从json加载一些信息并将其存储在一个对象中。它还具有一些用于其他控制器检索该信息的功能 var particServices = angular.module('particServices', []); particServices.service('particSrv', function() { var
var particServices = angular.module('particServices', []);
particServices.service('particSrv', function() {
var data = {};
this.updateData = function(scope) {
data = // http call, saves in data
}
this.getName = function(code) {
return data.name;
}
});
我有一个由控制器辅助的html页面,它使用一个指令板(没有参数,非常简单)。这是控制器:
var bControllers = angular.module('bControllers', []);
bControllers.controller('bController', ['$scope', 'particSrv', function ($scope, particSrv) {
$scope.getName = function(code) {
return particSrv.getName(code);
};
particSrv.updateData($scope);
}]);
如您所见,控制器调用初始化服务中的对象。由于这是一个单例,我知道一旦加载了信息,就不需要对updateData进行其他调用,并且使用服务中的getter(在本例中为getName)的其他人也可以使用该信息
我有一个非常简单的指令板(我在这里简化了),它使用另一个指令
角度.module('tsdirections',[])
指令('board',['dataSrv','particSrv',函数(dataSrv,particSrv){
返回{
限制:'E',
替换:正确,
范围:正确,
控制器:函数($scope){
$scope.getName=函数(代码){
返回particSrv.getName(代码);
};
dataSrv.updateData($scope,'board,'U');
},
templateUrl:“”
};
}]);
这是生物指令:
angular.module('gDirectives', [])
.directive('bio', function() {
return {
scope: {
partic: '&'
},
controller: function($scope) {
$scope.name = $scope.partic({code: $scope.athid});
},
template: '<a ng-href="PROFILE.html">{{name}}</a>'
};
})
angular.module('gDirectives',[])
.directive('bio',function(){
返回{
范围:{
partic:“&”
},
控制器:函数($scope){
$scope.name=$scope.partic({code:$scope.athid});
},
模板:“”
};
})
现在,我所期望的是,在bio指令中,显示从party检索到的信息,但显然,在主控制器中初始化parti之前,会处理该指令
我的印象是,即使在处理指令时仍然没有加载此信息,但一旦服务完成且信息准备就绪,它就会自动出现在我的指令中,但这似乎不是这样工作的。我一直在读$watch和$digest,但我不明白为什么(如果)我需要手动调用它们来解决这个问题
任何暗示都将不胜感激。如果需要,我可以提供更多的技术细节。指令将在应用程序加载时初始化,用户打开该指令所在的页面,如果您稍后设置了某些属性(例如,从api),它将更新指令中的该属性,但该指令不会重新初始化($scope.partic({code:$scope.athid})不会被叫来) 如果您希望指令等待初始化,则应在以下情况下使用ng。大概是这样的:
<div data-directive-name data-some-property="someProperty" data-ng-if="someProperty"></div>
在这种情况下,当(如果)您在$scope.someProperty中有一些值时,将初始化指令。但是,如果您可以为某些属性设置错误的值,则这不是很好。在这种情况下,您需要使用某种类型的已加载标志。您没有将“particServices”作为依赖项包含在使用“particServices”服务的其他模块中。您的模块应该如下所示:
var bControllers = angular.module('bControllers', ['particServices']);
angular.module('tsDirectives', ['particServices']);
angular.module('gDirectives', ['particServices']);
不要描述你的代码。张贴它。我们无法告诉您如何仅用代码描述来修复代码。您是对的,对不起,我担心代码会使问题过于复杂。我刚刚编辑了这个问题。我认为这不是问题。我管理app.js文件中的所有模块。管理?我可以知道怎么做吗?使用$injector?我的主应用程序使用ng app=“myApp”,它通过注入加载所有模块。也许我错了,但是应用程序在需要的时候找到合适的模块似乎没有问题。这听起来很有趣!一些我不知道的事情。你可以分享依赖注入的代码,完全用于参考目的吗?我在我的主html中有这个代码,
,然后我有一个myApp.js文件,其中包含所有使用的模块,如var app=angular.module('myApp'、['module1'、'module2'、'module3'])代码>如果我没有弄错的话,如果属性为false,ng If将不会加载数据,这可能没问题,但一旦数据加载到服务中并且属性变为true,我就需要它来加载数据。只要某个属性有任何“truthy”值,它就会被加载。谢谢,@Ivan,这很有效<代码>
我只是认为行为对于angular是隐式的,因为我在模型中使用了一个属性,该属性将在稍后更新。
var bControllers = angular.module('bControllers', ['particServices']);
angular.module('tsDirectives', ['particServices']);
angular.module('gDirectives', ['particServices']);