2016-01-11 32 views
-1

对于下面的代码,用angularJS,纳克控制器可变Vs的NG-INIT vairable

<script type="text/javascript"> 
    angular.module('app').controller('add', ['$scope',function($scope) { 
      $scope.name = "Bonita Ln"; 
    }]); 
</script> 

访问$scope可变构件name是,

<div ng-app="app" ng-controller="add"> 
    <script type="text/javascript"> 
     var dom_el = document.querySelector('[ng-controller="add"]'); 
     var ng_el = angular.element(dom_el); 
     var ng_el_scope = ng_el.scope(); 
     var name = ng_el_scope.name; 
    </script> 
</div> 

下面是角代码,访问ng-init变量name使用角度表达式,

<body ng-app=""> 
    <div ng-init="name='Bonita Ln'"> 
     {{name}} 
    </div> 
</body> 

如何使用JavaScript访问ng-init变量name

+1

http://jsfiddle.net/oomum13b/1/ – Cherniv

+0

我建议你阅读的角度教程,您使用的角度的方法是不是一个好习惯。 – Serginho

+0

@Serginho我不认为这是很好的做法。 – overexchange

回答

0

您可以通过访问控制器中的变量$scope.name来做到这一点,但它必须在您的范围内定义。

<div ng-init="name='Bonita Ln'"> 
    {{name}} 
<div ng-controller="MyCtrl"> 
    Hello, {{name2}}! 
    </div> 
</div> 


angular.module('myApp',[]).controller('MyCtrl',function($scope) { 
    $scope.name2 = $scope.name; 
}) 

这工作,因为你在父范围控制器定义名称,并正在继承

但如果同一个控制器HTML模板将看起来像:

<div ng-controller="MyCtrl"> 
<div ng-init="name='Bonita Ln'"> 
    {{name}} 
Hello, {{name2}}! 
    </div> 
</div> 

则将不起作用,因为在调用控制器功能时变量未定义

0

您可以按完全相同的方式使用它,但不应该这样做。

我压低了你的问题,因为它确实是非常糟糕的做法,我的意思是你提供的每一行代码都是不好的做法。

我很努力地找出你想要做的事情,所以我不能真正为你提供更好的代码,但我可以为你提供一些链接,你必须在继续之前检查出来无论你现在编码。

我知道,我的评论听起来很苛刻的集合,但将来你会感谢你,如果你写的更规范Angular,并遵循定义的风格指南。
还要记住,角度上,你的代码不应该知道DOM,你不需要为DOM元素指定eventListeners,只需使用ng-click等适当的指令即可。
(是的,我知道有可能是例外的规则)