前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10-angular 实例学习-1

10-angular 实例学习-1

作者头像
西南_张家辉
发布2021-02-02 09:51:11
5000
发布2021-02-02 09:51:11
举报
文章被收录于专栏:张家辉的树屋

controller 和 ng-options

CSDN 链接

1.demo:

代码语言:javascript
复制
    <div ng-app="myApp" ng-init="number=1;cost=1" ng-controller="myCtr" class="wrapper">
        <div class="money">
            numebr:
            <input type="number" ng-model="number" name="" min="0" id="">
            
            <br>

            cost:
            <input type="number" name="" min="0" ng-model="cost" id="">
            <select ng-model="inCurr" ng-options=" x for x in rate">
                <option>{{ x }}option>
            select>
            <br>
            
            <p ng-repeat="x in rate">
                {{ total(x) | currency:x}}
            p>
            <br>
            <button ng-click="">paybutton> 
            
        div>

    div>
    <script src='https://cdn.bootcss.com/angular.js/1.6.8/angular.js'>script>
    <script>
        var app = angular.module('myApp',[]);
        app.controller('myCtr',function($scope){
            $scope.numebr = 1;
            $scope.cost = 1;
            $scope.rate = ['USD','EUR','CNY'];
            $scope.inCurr = 'CNY';
            $scope.totalRate = {
                USD: 1,
                EUR: 0.8,
                CNY: 6

            };

            $scope.total = function total(outCurr){
                // console.log(outCurr);
                
                return $scope.convert($scope.number * $scope.cost,$scope.inCurr,outCurr)
            };

            $scope.convert = function covert(amount,inCurr,outCurr){
                // console.log(amount);
                // console.log(outCurr);
                
                // console.log(amount * $scope.totalRate[outCurr]);
                console.log(inCurr);
                
                return amount * $scope.totalRate[outCurr] / $scope.totalRate[inCurr];
            }

        })
    script>
复制代码
1.1 思考上面的 demo
  • 其中逻辑:
    • 为了写了一个汇率转换的小组件,其中 EUR USD CNY 三种。
  • 难点:
    • select 其中 ng-options 配合 select 和 option 一起使用。x for x in items
  • 函数
    • total(x) 首先计算总值,然后再根据汇率进行换算。通过 ng-repeat 来遍历三种汇率的钱币。

service-factory

  • 我们可以把 service 封装起来
  • 使用 .factory 然后在返回这个 service 然后我们就可以使用 这个 service 作用就是返回一个有属性有方法的对象。
代码语言:javascript
复制
    <span class="hljs-comment">//创建模型</span>
    <span class="hljs-keyword">var</span> app = angular.module(<span class="hljs-string">'myApp'</span>, []);

    <span class="hljs-comment">//通过工厂模式创建自定义服务</span>
    app.factory(<span class="hljs-string">'myFactory'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-keyword">var</span> service = {};<span class="hljs-comment">//定义一个Object对象'</span>
        service.name = <span class="hljs-string">"张三"</span>;
        <span class="hljs-keyword">var</span> age;<span class="hljs-comment">//定义一个私有化的变量</span>
        <span class="hljs-comment">//对私有属性写getter和setter方法</span>
        service.setAge = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">newAge</span>)</span>{
            age = newAge
        }
        service.getAge = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">return</span> age; 
        }
        <span class="hljs-keyword">return</span> service;<span class="hljs-comment">//返回这个Object对象</span>
    });
    <span class="hljs-comment">//创建控制器</span>
    app.controller(<span class="hljs-string">'myCtrl'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">$scope, myFactory</span>) </span>{
        myFactory.setAge(<span class="hljs-number">20</span>);
        $scope.r =myFactory.getAge();
        alert(myFactory.name);
    });
<span class="xml"><span class="hljs-tag"></<span class="hljs-name">script</span>></span></span>
<span class="copy-code-btn">复制代码</span></code></pre><ul>
<li>在自定义服务里注入服务示例,但不能注入$scope作用域对象。</li>
</ul>
<pre><code class="hljs javascript copyable" lang="javascript"><script
    <span class="hljs-keyword">var</span> app = angular.module(<span class="hljs-string">'myApp'</span>, []);
    app.factory(<span class="hljs-string">'myFactory'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">$http,$q</span>) </span>{
        <span class="hljs-keyword">var</span> service = {};
        service.name = <span class="hljs-string">"张三"</span>;
        <span class="hljs-comment">//请求数据</span>
        service.getData = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">var</span> d = $q.defer();
            $http.get(<span class="hljs-string">"url"</span>)<span class="hljs-comment">//读取数据的函数。</span>
            .success(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">response</span>) </span>{
                d.resolve(response);
            })
            .error(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
                d.reject(<span class="hljs-string">"error"</span>);
            });
            <span class="hljs-keyword">return</span> d.promise;
        }       
        <span class="hljs-keyword">return</span> service;
    });
    app.controller(<span class="hljs-string">'myCtrl'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">$scope, myFactory</span>) </span>{
        <span class="hljs-comment">//alert(myFactory.name);</span>
        myFactory.getData().then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
            <span class="hljs-built_in">console</span>.log(data);<span class="hljs-comment">//正确时走这儿</span>
        },<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
            alert(data)<span class="hljs-comment">//错误时走这儿</span>
        });;
    });
<span class="xml"><span class="hljs-tag"></<span class="hljs-name">script</span>></span></span>
<span class="copy-code-btn">复制代码</span></code></pre><h2 class="heading" data-id="heading-4">service-service</h2>
<ul>
<li>通过service方式创建自定义服务,相当于new的一个对象:var s = new myService();,只要把属性和方法添加到this上才可以在controller里调用。</li>
</ul>
<pre><code class="hljs html copyable" lang="html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">ng-app</span>=<span class="hljs-string">"myApp"</span> <span class="hljs-attr">ng-controller</span>=<span class="hljs-string">"myCtrl"</span>></span>
    <span class="hljs-tag"><<span class="hljs-name">h1</span>></span>{{r}}<span class="hljs-tag"></<span class="hljs-name">h1</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="javascript">
    <span class="hljs-keyword">var</span> app = angular.module(<span class="hljs-string">'myApp'</span>, []);

    app.service(<span class="hljs-string">'myService'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">$http,$q</span>) </span>{
        <span class="hljs-keyword">this</span>.name = <span class="hljs-string">"service"</span>;
        <span class="hljs-keyword">this</span>.myFunc = <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">x</span>) </span>{
            <span class="hljs-keyword">return</span> x.toString(<span class="hljs-number">16</span>);<span class="hljs-comment">//转16进制</span>
        }
        <span class="hljs-keyword">this</span>.getData = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">var</span> d = $q.defer();
            $http.get(<span class="hljs-string">"ursl"</span>)<span class="hljs-comment">//读取数据的函数。</span>
                .success(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">response</span>) </span>{
                d.resolve(response);
            })
                .error(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
                alert(<span class="hljs-number">0</span>)
                d.reject(<span class="hljs-string">"error"</span>);
            });
            <span class="hljs-keyword">return</span> d.promise;
        }
    });
    app.controller(<span class="hljs-string">'myCtrl'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">$scope, myService</span>) </span>{
        $scope.r = myService.myFunc(<span class="hljs-number">255</span>);
        myService.getData().then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
            <span class="hljs-built_in">console</span>.log(data);<span class="hljs-comment">//正确时走这儿</span>
        },<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
            alert(data)<span class="hljs-comment">//错误时走这儿</span>
        });
    });
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>

<span class="copy-code-btn">复制代码</span></code></pre><h2 class="heading" data-id="heading-5">service-provder</h2>
<ul>
<li>
<p>只有provder是能传 .config() 函数的 service。如果想在 service 对象启用之前,先进行模块范围的配置,那就应该选择 provider。需要注意的是:在config函数里注入provider时,名字应该是:providerName+Provider.</p>
</li>
<li>
<p>使用Provider的优点就是,你可以在Provider对象传递到应用程序的其他部分之前在app.config函数中对其进行修改。</p>
</li>
<li>
<p>当你使用Provider创建一个service时,唯一的可以在你的控制器中访问的属性和方法是通过$get()函数返回内容。</p>
</li>
</ul>
<pre><code class="hljs html copyable" lang="html"><span class="hljs-tag"><<span class="hljs-name">body</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">ng-app</span>=<span class="hljs-string">"myApp"</span> <span class="hljs-attr">ng-controller</span>=<span class="hljs-string">"myCtrl"</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>

<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="actionscript">
    <span class="hljs-keyword">var</span> app = angular.module(<span class="hljs-string">'myApp'</span>, []);

    <span class="hljs-comment">//需要注意的是:在注入provider时,名字应该是:providerName+Provider   </span>
    app.config(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(myProviderProvider)</span></span>{
        myProviderProvider.setName(<span class="hljs-string">"大圣"</span>);       
    });
    app.provider(<span class="hljs-string">'myProvider'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span> </span>{
        <span class="hljs-keyword">var</span> name=<span class="hljs-string">""</span>;
        <span class="hljs-keyword">var</span> test={<span class="hljs-string">"a"</span>:<span class="hljs-number">1</span>,<span class="hljs-string">"b"</span>:<span class="hljs-number">2</span>};
        <span class="hljs-comment">//注意的是,setter方法必须是(set+变量首字母大写)格式</span>
        <span class="hljs-keyword">this</span>.setName = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(newName)</span></span>{
            name = newName  
        }

        <span class="hljs-keyword">this</span>.$<span class="hljs-keyword">get</span> =<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">($http,$q)</span></span>{
            <span class="hljs-keyword">return</span> {
                getData : <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
                    <span class="hljs-keyword">var</span> d = $q.defer();
                    $http.get(<span class="hljs-string">"url"</span>)<span class="hljs-comment">//读取数据的函数。</span>
                        .success(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(response)</span> </span>{
                            d.resolve(response);
                        })
                        .error(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
                            d.reject(<span class="hljs-string">"error"</span>);
                        });
                    <span class="hljs-keyword">return</span> d.promise;
                },
                <span class="hljs-string">"lastName"</span>:name,
                <span class="hljs-string">"test"</span>:test
            }   
        }

    });
    app.controller(<span class="hljs-string">'myCtrl'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">($scope,myProvider)</span> </span>{
        alert(myProvider.lastName);
        alert(myProvider.test.a)
        myProvider.getData().then(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(data)</span></span>{
            <span class="hljs-comment">//alert(data)</span>
        },<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(data)</span></span>{
            <span class="hljs-comment">//alert(data)</span>
        });
    });
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"></<span class="hljs-name">body</span>></span>
<span class="copy-code-btn">复制代码</span></code></pre><h3 class="heading" data-id="heading-6">过滤器中注入自定义服务</h3>
<pre><code class="hljs html copyable" lang="html"><span class="hljs-tag"><<span class="hljs-name">body</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">ng-app</span>=<span class="hljs-string">"myApp"</span>></span>
    在过滤器中使用服务:
    <span class="hljs-tag"><<span class="hljs-name">h1</span>></span>{{255 | myFormat}}<span class="hljs-tag"></<span class="hljs-name">h1</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>

<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="actionscript">
    <span class="hljs-keyword">var</span> app = angular.module(<span class="hljs-string">'myApp'</span>, []);
    app.service(<span class="hljs-string">'hexafy'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span> </span>{
        <span class="hljs-keyword">this</span>.myFunc = <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">(x)</span> </span>{
            <span class="hljs-keyword">return</span> x.toString(<span class="hljs-number">16</span>);
        }
    });
    app.filter(<span class="hljs-string">'myFormat'</span>,[<span class="hljs-string">'hexafy'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(hexafy)</span> </span>{
        <span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(x)</span> </span>{
            <span class="hljs-keyword">return</span> hexafy.myFunc(x);
        };
    }]);
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"></<span class="hljs-name">body</span>></span>
<span class="copy-code-btn">复制代码</span></code></pre></div> <div class="image-viewer-box" data-v-78c9b824=""><!----></div>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.demo:
    • 1.1 思考上面的 demo
    • service-factory
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档