好好爱自己!

我也谈 AngularJS 怎么使用Directive, Service, Controller

原文地址:http://sunqianxiang.github.io/angularjs-zen-yao-shi-yong-directiveservicecontroller.html

 

其转自大漠穷秋,这是对于初学者来说 讲的非常好的入门文

在有关于 Directive,Service,Controller 时候先看一下图

逻辑图

这是我画出来帮助理解的,并不代表angularjs走这种逻辑。 不过在本例的确是这样的。 ========= 首先你需要先去定义你的module.

var Mymodule = angular.module('My.Alex.module', []);
html标记也记得修改哦
<html ng-app="My.Alex.module">

在这里我们先定义Service服务,本例是一个简单的图片添加的模式,数据跟add方法都在Service。这样有助于解耦。

Mymodule.service( 'Book',[ '$rootScope',function($rootScope){
    var service = {
        books: [
           { title: "Magician", author: "Raymond E. Feist" },
           { title: "The Hobbit", author: "J.R.R Tolkien" }
        ],
        addBook: function(book){
            service.books.push(book);
            $rootScope.$broadcast('books.update');
        }
    }
    return service;
}]);

在这里可以看出我定义了一个Book服务, 然后我现在要在controller添加他,来使用Book里面的数据。

Mymodule.controller("books.list",['$scope','Book',function(scope,Book){
            scope.$on('books.update',function(event){
                scope.books = Book.books;
                scope.$apply(); #必须加不然数据不更新
            });
            scope.books = Book.books;
        }]);

这里在controller里面定义服务更新的方法,其主要是更新scope. $broadcast 跟$on 对应使用

module.directive( "addBookButton", [ 'Book', function( Book ) {
return {
    restrict: "A",
        link: function( scope, element, attrs ) {
        element.bind( "click", function() {
            Book.addBook( { title: "Star Wars", author: "George Lucas" } );
        });
    }
}
}]);

然后我添加一个directive来让button可以添加书本。 这是一个bind的过程,剩下只要添加 到body里面就完成了

<body ng-controller="books.list">
    <li ng-repeat="book in books">
        <ul>{{book.title}}, {{book.author}}</ul>
    </li>
    <button add-book-button>Add book</button>
</body>

至此,可以得到一个上面所画的一个基本逻辑代码。 其主要部分也就这4块。其实service还可以传递给filter。

posted @   立志做一个好的程序员  阅读(649)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

不断学习创作,与自己快乐相处

点击右上角即可分享
微信分享提示