相关疑难解决方法(0)

AngularJS控制器中的'this'与$ scope

AngularJS主页"创建组件"部分中,有以下示例:

controller: function($scope, $element) {
  var panes = $scope.panes = [];
  $scope.select = function(pane) {
    angular.forEach(panes, function(pane) {
      pane.selected = false;
    });
    pane.selected = true;
  }
  this.addPane = function(pane) {
    if (panes.length == 0) $scope.select(pane);
    panes.push(pane);
  }
}
Run Code Online (Sandbox Code Playgroud)

注意如何select添加方法$scope,但是addPane添加了方法this.如果我将其更改为$scope.addPane,则代码会中断.

文档说实际上存在差异,但没有提到差异是什么:

以前版本的Angular(pre 1.0 RC)允许您this与该$scope方法互换使用,但现在不再是这种情况了.内的方法上的范围限定this并且$scope是可互换的(角套this$scope),但是不另外你的控制器构造内部.

如何this$scope在AngularJS控制器的工作?

this angularjs angularjs-scope

1013
推荐指数
5
解决办法
29万
查看次数

链接vs编译与控制器

创建指令时,可以将代码放入编译器,链接函数或控制器中.

在文档中,他们解释说:

  • 编译和链接功能用于角度循环的不同阶段
  • 控制器在指令之间共享

但是,对我而言,目前尚不清楚哪种代码应该去哪里.

例如:我可以在编译中创建函数并将它们附加到链接中的作用域,还是仅将函数附加到控制器中的作用域?

如果每个指令都有自己的控制器,控制器如何在指令之间共享?控制器是真的共享还是只是范围属性?

angularjs angularjs-directive

525
推荐指数
6
解决办法
23万
查看次数


angularjs中的编译和链接函数有什么区别

有人可以简单解释一下吗?

文档似乎有点迟钝.我没有得到何时使用一个而不是另一个的本质和全局.两个对比的例子很棒.

javascript angularjs

209
推荐指数
6
解决办法
9万
查看次数

我们如何在Angularjs中的指令之外使用$ compile

我想$compile在函数内部的控制器中使用而不是在指令中使用.可能吗?我正在尝试下面的代码.

$compile('<div ng-attr-tooltip="test">Cancel</div>')(scope)
Run Code Online (Sandbox Code Playgroud)

但这是投掷范围是未定义的错误.我试图传递$scope函数内部,但它无法正常工作.

javascript angularjs

22
推荐指数
3
解决办法
1万
查看次数

理解angularJS的逐步手动自举

我正在阅读angularJS的基础知识,了解它是如何手动自举的.我遇到了不同的方法,发现这种方法最合适.

angular.element(document).ready(function(){
   angular.bootstrap(document,['myapp'])
})
Run Code Online (Sandbox Code Playgroud)

更进一步,我遇到了另一种将其打破基础的方式.我根据我的理解对代码进行了评论,但有人可以向我解释有关如何在幕后工作的更多细节.

window.onload = function (){

  var $rootElement = angular.element(window.document);
  var modules = [
    'ng',       // angular module
    'myApp',    // custom module
    // what are we trying to achieve here?
    function($provide){ 
        $provide.value('$rootElement',$rootElement)
    }
  ];

  var $injector = angular.injector(modules);      // one injector per application
  var $compile = $injector.get('$compile');       // Compile Service: it traverses the DOM and look for directives and  compile and return linking function. No accecess to scope
  var compositeLinkFn = $compile($rootElement);   // …
Run Code Online (Sandbox Code Playgroud)

bootstrapping angularjs

16
推荐指数
1
解决办法
762
查看次数

如何在angularjs中编写指令

我喜欢使用指令制作自定义组件.我检查了很多教程,让我感到困惑,任何人都可以解释指令是如何工作的.我计划制作的组件是

<shout-list></shout-list>
Run Code Online (Sandbox Code Playgroud)

喊名单的模板就是这样的

<div class="shout" ng-repeat="shout in shouts">
    <p>{{shout.message}}</p>
    <img src="media/images/delete.png" width="32" height="32" ng-click="deleteShout({{$index}},'{{shout._id}}')"/>
</div> 
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-directive

10
推荐指数
1
解决办法
4881
查看次数

AngularJS指令在数据之前加载

假设我正在使用$ http将变量加载到$ scope中:

$http.get('/teachers/4').success(function(data){
  $scope.teacher = data;
});
Run Code Online (Sandbox Code Playgroud)

我的模板使用这些数据:

Teacher: {{teacher.name}}
<students-view students="teacher.students"></students-view>
Run Code Online (Sandbox Code Playgroud)

该指令可以加载BEFORE老师完成加载,但我的指令的代码取决于正在加载的teacher.students数组:

app.directive('studentsView', function(){
  return {
    scope: { students: '=' },
    controller: function($scope){
      _.each($scope.students, function(s){
        // this is not called if teacher loads after this directive
      });
    }
  };
});
Run Code Online (Sandbox Code Playgroud)

我如何得到我想要的行为?我不想停止使用$ http,如果可能的话,我不想为范围分配承诺.

angularjs angularjs-directive

7
推荐指数
1
解决办法
1万
查看次数

为什么要将控制器放在AngularJS的指令中?

我最近看到了这个例子.这是我第一次在指令中看到控制器.这是正常的事吗.我认为你应该将这两个保留在不同的区域以便测试:

myModule.directive('myComponent', function(mySharedService) {
    return {
        restrict: 'E',
        controller: function($scope, $attrs, mySharedService) {
            $scope.$on('handleBroadcast', function() {
                $scope.message = 'Directive: ' + mySharedService.message;
            });
        },
        replace: true,
        template: '<input>'
    };
})
Run Code Online (Sandbox Code Playgroud)

angularjs

5
推荐指数
1
解决办法
588
查看次数

AngularJS中编译/链接函数和控制器函数之间的区别?

我正在尝试编写自己的AngularJS指令.我想我理解compilelink功能之间的区别.这段视频很好地清除了它.

但我现在不确定我是否理解控制器在指令中扮演的角色.一个指令可以包括一个controller功能,你可以注入$element,$attrs而这种进入,所以它可以做几乎所有的link周围的功能可以做到,我相信,其他的方式.

所以我有两个问题:

  1. controller功能和link功能之间是否存在重要的技术差异?
  2. 什么是最佳做法?我应该做哪些工作?

angularjs angularjs-directive angularjs-controller

5
推荐指数
0
解决办法
141
查看次数