Javascript angularJS的执行顺序是什么?

Javascript angularJS的执行顺序是什么?,javascript,angularjs,angularjs-service,angular-material,Javascript,Angularjs,Angularjs Service,Angular Material,我是一个开始使用棱角材料的新手。我在一家酒吧工作 基本上,就像 <md-sidenav layout="column" class="md-sidenav-left md-whiteframe-z2" md-component-id="left"> </md-sidenav> <md-button id="side-button" ng-click="toggleLeft()"></md-button> 它像预期的那样工作。但有一件奇怪的事,当我

我是一个开始使用棱角材料的新手。我在一家酒吧工作

基本上,就像

<md-sidenav layout="column" class="md-sidenav-left md-whiteframe-z2" md-component-id="left">
</md-sidenav>
<md-button id="side-button" ng-click="toggleLeft()"></md-button>
它像预期的那样工作。但有一件奇怪的事,当我在那之后写下另一行时:

timeLine.toggle_left_most = $scope.toggleLeft();
并将
ng click=“toggleLeft()”
替换为
ng click=“timeLine.toggle\u left\u most()”
,它随我返回“未找到句柄“left”的实例”

但是当我在
$mdSidenav('left').toggle()
后面插入一行以查询md component id=“left”的元素时,它返回了该对象。这让我想问一下AngularJS的执行顺序和更深层次的原则

我的问题是,当DOM已经加载时,为什么它返回“未找到实例”?为什么添加一行赋值会破坏代码?$mdSidenav是否不仅需要DOM,还需要加载其他东西?关键是什么


问题是因为当我不写那一行时,$scope.toggleLeft的赋值不会立即执行吗?那么什么时候执行呢?

在JavaScript中,函数是对象。如果您使用
()
,则表示您正在执行函数,但必须了解您不是在管理函数的定义

因此,
timeLine.toggle_left_most=$scope.toggleLeft()
实际上正在运行
$scope.toggleLeft
并将其返回值分配给
时间线。toggleft\u most


我不明白您为什么希望发生这种情况。

此处描述了未找到句柄left的
实例的问题-

除了上面描述的解决方案之外,这对我来说也是可行的-使用$mdComponentRegistry的
getInstances
方法来检查目前哪些项目可用,跳过就是没有:

//on some event, state change for example
$rootScope.$on('$stateChangeStart', function(event, toState, toStateParams) {
  if ($mdComponentRegistry.getInstances().length) $mdSidenav('left').close();
});
你宣布

timeLine.toggle_left_most = $scope.toggleLeft();
但是
timeLine
对象对html模板不可用,因为它不是$scope变量,所以您的代码应该如下所示

var toggleLeft=function() {
                $mdSidenav('left').toggle()
                    .then(function(){
                        $log.debug("toggle left is done");
                    });
            };

$scope.timeLine.toggle_left_most=toggleLeft;
通常我遵循以上的风格。
我不确定这个答案…

指令具有
优先级:0,
属性,您可以设置它