相关疑难解决方法(0)

你可以在创建时将参数传递给AngularJS控制器吗?

我有一个控制器负责与API通信以更新用户的属性,名称,电子邮件等.每个用户都有一个'id'在查看个人资料页面时从服务器传递的用户.

我想将此值传递给AngularJS控制器,以便它知道当前用户的API入口点是什么.我试过传递价值ng-controller.例如:

function UserCtrl(id, $scope, $filter) {

$scope.connection = $resource('api.com/user/' + id)
Run Code Online (Sandbox Code Playgroud)

并在HTML中

<body ng-controller="UserCtrl({% id %})">
Run Code Online (Sandbox Code Playgroud)

其中{% id %}打印从服务器发送的id.但我得到错误.

在创建时将值传递给控制器​​的正确方法是什么?

javascript angularjs

278
推荐指数
9
解决办法
32万
查看次数

动态加载AngularJS控制器

我有一个现有的页面,我需要删除一个带有可以动态加载的控制器的角度应用程序.

这是一个片段,它根据API和我发现的一些相关问题实现了我应该如何完成的最佳猜测:

// Make module Foo
angular.module('Foo', []);
// Bootstrap Foo
var injector = angular.bootstrap($('body'), ['Foo']);
// Make controller Ctrl in module Foo
angular.module('Foo').controller('Ctrl', function() { });
// Load an element that uses controller Ctrl
var ctrl = $('<div ng-controller="Ctrl">').appendTo('body');
// compile the new element
injector.invoke(function($compile, $rootScope) {
    // the linker here throws the exception
    $compile(ctrl)($rootScope);
});
Run Code Online (Sandbox Code Playgroud)

JSFiddle.请注意,这是实际事件链的简化,上面的行之间有各种异步调用和用户输入.

当我尝试运行上面的代码时,$ compile返回的链接器抛出:Argument 'Ctrl' is not a function, got undefined.如果我正确理解了引导程序,它返回的注入器应该知道Foo模块,对吧?

相反,如果我使用一个新的注入器angular.injector(['ng', 'Foo']),它似乎工作,但它创建一个新的$rootScope,不再与Foo模块被引导的元素相同的范围. …

javascript angularjs

64
推荐指数
3
解决办法
8万
查看次数

如何绑定AngularJS控制器以动态添加HTML?

对于这种情况,我有一个带有一些AngularJS指令,控制器等的HTML页面.

像这样的东西:

<html>
<body>
  <div ng-controller="myCtrl">
     <ul><li ng-repeat="item in items">{{item.name}}</li></ul>
  </div>
  <div class="placeholder">
     ...new HTML here...
  </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

请注意,ng-app页面上没有指令.我不依赖于自动引导,而是使用手动引导方法.

angular.bootstrap(document, ['myApp']);
Run Code Online (Sandbox Code Playgroud)

首先,我创建了将被引导到文档的模块.然后,当加载动态确定的依赖项列表时,我会附加一些服务,控制器等.一切准备就绪后,我调用bootstrap方法.

这一切都很好,直到AngularJS之外的JavaScript附加到该...new HTML here...位置的DOM .AngularJS不处理新的HTML.

我的理解是你需要调用$scope.$apply()或者$digest()什么来让AngularJS识别新的HTML.但是,在我的示例中,没有围绕新HTML的控制器.传入的HTML可能如下所示:

  <div ng-controller="myOtherCtrl">
     <h2>{{model.title}}</h2>
  </div>
Run Code Online (Sandbox Code Playgroud)

换句话说,它依赖于app模块中的不同控制器.

  • 我无法angular.bootstrap再次调用该方法,因为页面已经绑定.
  • 我无法$scope.$apply从控制器内部调用,因为重点是控制器代码没有被调用.
  • 我没有看到获取对控制器的引用以重新应用或刷新它的方法.

我已经阅读了Ifeanyi Isitor延迟加载帖子Ben Nadel帖子,但他们似乎没有解决在现有控制器的上下文之外加载的HTML.

我不能选择使用AngularJS指令来处理DOM操作.它是体系结构的一个独立部分,它使用ExtJS作为注入新DOM元素的框架.这意味着我不能使用ngInclude作为例子.

看起来我可以打电话angular.module('myApp').$refresh();,.$apply()但这不是一个选择.我错过了什么?

javascript angularjs

14
推荐指数
2
解决办法
3万
查看次数

标签 统计

angularjs ×3

javascript ×3