Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS—;将作用域(不含$)注入控制器_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript AngularJS—;将作用域(不含$)注入控制器

Javascript AngularJS—;将作用域(不含$)注入控制器,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,在中,我注意到他们已将一个作用域(没有前缀美元符号)传递给底部附近的对话框控制器 (function(angular, undefined){ "use strict"; angular .module('demoApp', ['ngMaterial']) .controller('AppCtrl', AppController); function AppController($scope, $mdDialog) { var alert; $scope.

在中,我注意到他们已将一个作用域(没有前缀美元符号)传递给底部附近的
对话框控制器

(function(angular, undefined){
  "use strict";
  angular
   .module('demoApp', ['ngMaterial'])
   .controller('AppCtrl', AppController);
  function AppController($scope, $mdDialog) {
    var alert;
    $scope.showAlert = showAlert;
    $scope.showDialog = showDialog;
    $scope.items = [1, 2, 3];
    // Internal method
    function showAlert() {
      alert = $mdDialog.alert({
        title: 'Attention',
        content: 'This is an example of how easy dialogs can be!',
        ok: 'Close'
      });
      $mdDialog
        .show( alert )
        .finally(function() {
          alert = undefined;
        });
    }
    function showDialog($event) {
       var parentEl = angular.element(document.body);
       $mdDialog.show({
         parent: parentEl,
         targetEvent: $event,
         template:
           '<md-dialog aria-label="List dialog">' +
           '  <md-dialog-content>'+
           '    <md-list>'+
           '      <md-list-item ng-repeat="item in items">'+
           '       <p>Number {{item}}</p>' +
           '      '+
           '    </md-list-item></md-list>'+
           '  </md-dialog-content>' +
           '  <div class="md-actions">' +
           '    <md-button ng-click="closeDialog()" class="md-primary">' +
           '      Close Dialog' +
           '    </md-button>' +
           '  </div>' +
           '</md-dialog>',
         locals: {
           items: $scope.items
         },
         controller: DialogController
      });
      function DialogController(scope, $mdDialog, items) {
        scope.items = items;
        scope.closeDialog = function() {
          $mdDialog.hide();
        }
      }
    }
})(angular);
(函数(角度,未定义){
“严格使用”;
有棱角的
.module('demoApp',['ngMaterial']))
.controller(“AppCtrl”,AppController);
函数AppController($scope,$mdDialog){
风险值预警;
$scope.showAlert=showAlert;
$scope.showDialog=showDialog;
$scope.items=[1,2,3];
//内部方法
函数showAlert(){
alert=$mdDialog.alert({
标题:"注意",,
内容:“这是一个对话框多么容易的例子!”,
好的:“结束”
});
$mdDialog
.显示(警报)
.最后(函数(){
警报=未定义;
});
}
函数showDialog($event){
var parentEl=angular.element(document.body);
$mdDialog.show({
家长:家长,
targetEvent:$event,
模板:
'' +
'  '+
'    '+
'      '+
“编号{{item}}

”+ ' '+ ' '+ ' ' + ' ' + ' ' + “关闭对话框”+ ' ' + ' ' + '', 当地人:{ 项目:$scope.items }, 控制器:对话框控制器 }); 功能对话框控制器(范围,$mdDialog,项){ scope.items=项目; scope.closeDialog=函数(){ $mdDialog.hide(); } } } })(角度);
我已经读到,
$
是一种命名约定,是确保变量不会被覆盖的好方法。为什么这段代码没有遵循这种约定?也就是说,在这种情况下,我们如何知道何时使用
$
,以及它的意义是什么?我相信在这种情况下,它肯定不仅仅是命名约定,或者为了保持一致性,作者会选择使用
$scope

注意:我知道链接函数中的
$scope
scope
之间的区别,其中
scope
指向一组固定的参数。我不相信这就是在本文中使用
scope
的原因,但如果我错了,请随时告诉我


谢谢!

我认为这里的文档是不一致的,同时也是正确的

这里的
scope
$scope
是相同的,但我只是在阅读了源代码后才发现。罪魁祸首行在
局部
选项扩展的地方,而这些选项又有一个
scope
属性

 return showDone = compilePromise.then(function(compileData) {
              angular.extend(compileData.locals, self.options);

              element = compileData.link(options.scope);
我很确定,
$scope
作为
scope
可访问只是偶然的,为了保持干净,应该使用
$scope
引用
$injector
提供的值,例如在控制器中


我已提交以修复不一致性并进行编译。

这不是对约定的失败,甚至不是对使用模式的代码段的失败

使用
scope
,而不是
$scope
,是为了避免覆盖嵌套函数中的变量

选择放置
范围
而不使用dolar符号,以避免为谁获取代码段而产生错误


例如,使用
控制器作为
语法来分离事物,可以帮助清理事物。

没错@freeloper。DialogController函数是一个普通函数,而不是角度控制器或角度指令控制器。scope只是给那里的参数起的一个名称。它不是注入的$scope。感谢您的深入了解-不过,它是通过$mdDialog.show({controller:DialogController});?作为一个控制器列出的?而且,呃,如果它不是控制器,它到底在做什么?:-)谢谢。你太棒了。非常感谢!我在这个问题上遇到了很多麻烦。