Angularjs 控制器和指令,优先级

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

我和Angularjs在一起几天了,我正在努力解决一些问题。我会尽我最大的努力解释这个问题是什么,我真的很感激任何人能在这方面给我的帮助

我的情况(简化)如下:

我有一个服务,它从json加载一些信息并将其存储在一个对象中。它还具有一些用于其他控制器检索该信息的功能

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']);